Quais URLs de ativos são aceitáveis ​​em uma instalação MU "vanilla"?

9

O Wordpress parece permitir que o conteúdo seja endereçado por muitos URIs em uma instalação do MU. Por exemplo:

 example.com/wp-content/blogs.dir/5/files/picture.jpg
 example.com/bob/files/picture.jpg
 example.com/bob/wp-content/blogs.dir/5/files/pictures.jpg

Todos parecem direcionar para o mesmo local. Existem mais aliases? Qual é canônico? Algum desses acidentes? Existem filtros relevantes?

wowest
fonte

Respostas:

4

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.dirno 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.phpprocessa 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 allatravés .htaccessassim, 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.phpseria um bom lugar para adicionar esse código.

Matthew Boynes
fonte
2

Nas instalações multisite, a instalação com o WordPress 3.5 ou posterior, ms-files.phpé ignorada diretamente e blogs.dirnão é usada.

Em vez disso, os uploads são armazenados wp-content/blogs/{blog_id}e referidos como tal. Isso significa que há apenas uma maneira de acessar arquivos em uma instalação de subdomínio e apenas duas na instalação de subdiretório.

shea
fonte