Wordpress semble laisser le contenu être traité par de nombreux URI lors d'une installation de MU. Par exemple:
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
Tous semblent se diriger vers le même endroit. Y a-t-il d'autres alias? Lequel est canonique? Est-ce que certains de ces accidents sont accidentels? Y a-t-il des filtres pertinents?
example.com/bob/files/picture.jpg est l'URL canonique préférée pour les images d'une installation WordPress Multisite. Les deux URL avec blogs.dir
dans l'URL sont essentiellement identiques et exploitent toutes deux la structure du système de fichiers. Le chemin avec 'bob' existe parce que vous avez effectué une installation de sous-répertoire, pas une installation de sous-domaine D'autres chemins existeraient en fonction de vos autres sites, par exemple. example.com/fred/wp-content/blogs.dir/5/files/pictures.jpg. Sinon, aucun autre chemin n'existe.
Il y a beaucoup de choses que l'on peut expliquer sur ce processus, et comme je ne suis pas certain du niveau de détail que vous recherchez, je vais vous expliquer les bases.
WordPress Multisite stocke les fichiers par blog_id
(le "5" après "/blogs.dir/") pour que les choses restent organisées et séparent les fichiers de différents sites. Cette structure de répertoire n'est pas destinée à être publique. WordPress utilise des règles de réécriture pour router ^files/(.+)
vers wp-includes/ms-files.php?file=$1
, puis wp-includes/ms-files.php
traite et affiche l'image et/ou certains en-têtes utiles. Il y a quelques avantages à cela:
blog_id
est 5.deny from all
à .htaccess
afin, par exemple, que les personnes ne puissent pas accéder aux tailles d'image originales si vous ne le souhaitez pas.Il y a un inconvénient principal, à savoir que les images/fichiers passent par PHP (et peuvent même nécessiter quelques requêtes MySQL), ce qui nécessite plus de ressources. Si un plugin de mise en cache est installé, les ressources supplémentaires doivent être négligeables.
En ce qui concerne les filtres, vous ne pouvez facilement rien filtrer dans le processus pour une raison: ni mu-plugins , les plugins, ni votre thème ne sont chargés *. Le mieux que vous puissiez faire est de remplacer les constantes dans wp-config.php. Voici les constantes les plus utiles/pertinentes que vous pouvez remplacer:
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 );
* Même si les plugins ne sont pas chargés, drop-ins do. Par conséquent, bien que vous ne puissiez pas utiliser les plugins standard, WordPress jette toujours les bases pour faire tout ce dont vous avez besoin, comme (comme mentionné ci-dessus) l’ajout du contrôle d’accès aux fichiers sensibles. Le sunrise.php
sans rendez-vous serait un bon endroit pour ajouter ce code.
Dans les installations multisites avec WordPress version 3.5 ou ultérieure, ms-files.php
est ignoré directement et blogs.dir
n'est pas utilisé.
Au lieu de cela, les téléchargements sont stockés dans wp-content/blogs/{blog_id}
et désignés comme tels. Cela signifie qu'il existe un moyenuniquepour accéder aux fichiers sur une installation de sous-domaine, et deux seulement sur l'installation de sous-répertoires.