web-dev-qa-db-fra.com

Quelles URL d'actif sont acceptables dans une installation "Vanilla" MU?

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?

9
wowest

Réponse courte

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.

Longue réponse

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:

  • En termes de sécurité, moins d'informations, c'est toujours mieux. "wp-content/blogs.dir/5" est un peu TMI - il indique que vous utilisez WordPress Multisite et que le blog_id est 5.
  • La structure de l'URL est identique à celle d'une installation sur un seul site. Si vous deviez déplacer un site d'une installation multisite à une autre, vous ne devriez pas mettre à jour ces références dans la base de données ni les anciens chemins pour les références externes.
  • Vous pouvez déplacer le répertoire de fichiers hors de l'accès public ou de 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.
  • Vous pouvez ajouter un contrôle d'accès à des fichiers spécifiques

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.

4
Matthew Boynes

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.

2
shea