Resposta curta
example.com/bob/files/picture.jpg é o URL canônico preferido para imagens em uma instalação Multisite do WordPress . Os dois URLs contidos blogs.dir
no URL são essencialmente idênticos e ambos aproveitam a estrutura do sistema de arquivos. O caminho com 'bob' existe porque você instalou um subdiretório, não uma instalação de subdomínio. Outros caminhos existiriam com base em seus outros sites, por exemplo, example.com/fred/wp-content/blogs.dir/5/files/pictures.jpg. Caso contrário, não existem outros caminhos.
Resposta longa
Muito se pode explicar sobre esse processo, e eu não tenho 100% de certeza do nível de detalhe que você está procurando, portanto, abordarei o básico aqui.
O WordPress Multisite armazena arquivos por blog_id
(o "5" depois de "/blogs.dir/") para manter as coisas organizadas e separar os arquivos de diferentes sites. Esta estrutura de diretórios não pretende ser pública. O WordPress usa regras de reescrita para rotear ^files/(.+)
e wp-includes/ms-files.php?file=$1
, em seguida, wp-includes/ms-files.php
processa e gera a imagem e / ou alguns cabeçalhos úteis. Existem algumas vantagens nisso:
- Em termos de segurança, menos informações são sempre melhores. "wp-content / blogs.dir / 5" é um pequeno TMI - ele diz que você está executando o WordPress Multisite e que
blog_id
é 5.
- A estrutura da URL é idêntica à de uma instalação de site único. Se você alguma vez mover um site de uma instalação Multisite para sua própria instalação, não precisará atualizar essas referências no banco de dados ou 301 os caminhos antigos para referências externas.
- Você pode mover o diretório de arquivos de acesso público ou
deny from all
através .htaccess
assim, por exemplo, as pessoas não podem acessar os tamanhos de imagem originais, se você não quiser.
- Você pode adicionar controle de acesso a arquivos específicos
Há uma desvantagem principal, que é a de que as imagens / arquivos estão passando pelo PHP (e talvez até exijam algumas consultas no MySQL), por isso requer mais recursos. Se você tiver um plug-in de cache instalado, os recursos adicionais deverão ser desprezíveis.
No que diz respeito aos filtros, não é possível filtrar facilmente nada no processo por um motivo: nem os plugins mu , os plugins ou o seu tema são carregados *. O melhor que você pode fazer é substituir as constantes no wp-config.php. Aqui estão as constantes mais úteis / relevantes que você pode substituir:
if ( !defined( 'UPLOADBLOGSDIR' ) )
define( 'UPLOADBLOGSDIR', 'wp-content/blogs.dir' );
if ( !defined( 'UPLOADS' ) ) {
// Uploads dir relative to ABSPATH
define( 'UPLOADS', UPLOADBLOGSDIR . "/{$wpdb->blogid}/files/" );
if ( 'wp-content/blogs.dir' == UPLOADBLOGSDIR )
define( 'BLOGUPLOADDIR', WP_CONTENT_DIR . "/blogs.dir/{$wpdb->blogid}/files/" );
}
/**
* Optional support for X-Sendfile header
*/
if ( !defined( 'WPMU_SENDFILE' ) )
define( 'WPMU_SENDFILE', false );
/**
* Optional support for X-Accel-Redirect header
*/
if ( !defined( 'WPMU_ACCEL_REDIRECT' ) )
define( 'WPMU_ACCEL_REDIRECT', false );
* Embora os plug-ins não sejam carregados, os drop-ins sim. Portanto, embora você não possa usar plug-ins padrão, o WordPress ainda estabelece as bases para fazer o que você precisa, como (como mencionado acima) adicionar controle de acesso a arquivos confidenciais. O drop-in sunrise.php
seria um bom lugar para adicionar esse código.