Welche Asset-URLs sind in einer Vanille-MU-Installation zulässig?

9

Wordpress scheint zuzulassen, dass Inhalte von vielen URIs in einer MU-Installation adressiert werden. Zum Beispiel:

 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

Alle scheinen zum selben Ort zu routen. Gibt es mehr Aliase? Welches ist kanonisch? Sind diese versehentlich? Gibt es relevante Filter?

wowest
quelle

Antworten:

4

Kurze Antwort

example.com/bob/files/picture.jpg ist die bevorzugte kanonische URL für Bilder in einer WordPress Multisite-Installation . Die beiden URLs blogs.dirin der URL sind im Wesentlichen identisch und nutzen die Dateisystemstruktur. Der Pfad mit 'bob' existiert, weil Sie eine Unterverzeichnisinstallation durchgeführt haben, keine Subdomäneninstallation. Andere Pfade würden basierend auf Ihren anderen Websites existieren, z. B. example.com/fred/wp-content/blogs.dir/5/files/pictures.jpg. Andernfalls existieren keine anderen Pfade.

Lange Antwort

Es gibt eine Menge, die man über diesen Prozess erklären kann, und ich bin mir nicht 100% sicher, welchen Detaillierungsgrad Sie suchen. Deshalb werde ich hier die Grundlagen erläutern.

WordPress Multisite speichert Dateien nach blog_id(die "5" nach "/blogs.dir/"), um die Organisation zu gewährleisten und die Dateien verschiedener Sites zu trennen. Diese Verzeichnisstruktur soll nicht öffentlich sein. Wordpress verwendet Rewrite - Regeln zu routen ^files/(.+)zu wp-includes/ms-files.php?file=$1, und dann wp-includes/ms-files.phpverarbeitet und gibt das Bild und / oder ein paar hilfreichen Header. Dies hat einige Vorteile:

  • In Bezug auf die Sicherheit sind weniger Informationen immer besser. "wp-content / blogs.dir / 5" ist ein kleines TMI - es heißt, Sie führen WordPress Multisite aus und das blog_idist 5.
  • Die URL-Struktur ist identisch mit der einer Single-Site-Installation. Wenn Sie jemals eine Site von einer Multisite-Installation auf eine eigene verschieben würden, müssten Sie diese Referenzen in der Datenbank oder die alten Pfade für externe Referenzen nicht aktualisieren.
  • Sie können das Dateiverzeichnis aus dem öffentlichen Zugriff oder deny from alldurch verschieben, .htaccesssodass beispielsweise nicht auf die ursprünglichen Bildgrößen zugegriffen werden kann, wenn Sie dies nicht möchten.
  • Sie können bestimmten Dateien Zugriffssteuerung hinzufügen

Es gibt einen Hauptnachteil: Die Bilder / Dateien werden über PHP übertragen (und erfordern möglicherweise sogar einige MySQL-Abfragen), sodass mehr Ressourcen erforderlich sind. Wenn Sie ein Caching-Plugin installiert haben, sollten die zusätzlichen Ressourcen vernachlässigbar sein.

In Bezug auf Filter können Sie aus einem Grund nichts einfach filtern: Weder Mu-Plugins , Plugins noch Ihr Thema werden geladen *. Das Beste, was Sie tun können, ist, Konstanten in wp-config.php zu überschreiben. Hier sind die nützlichsten / relevantesten Konstanten, die Sie überschreiben können:

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 );

* Auch wenn Plugins nicht geladen werden, tun dies Drop-Ins . Obwohl Sie keine Standard-Plugins verwenden können, legt WordPress dennoch die Grundlage, um alles zu tun, was Sie benötigen, z. B. (wie oben erwähnt) die Zugriffskontrolle für vertrauliche Dateien hinzuzufügen. Das Drop-In sunrise.phpwäre ein guter Ort, um solchen Code hinzuzufügen.

Matthew Boynes
quelle
2

Bei Installationen mit mehreren Standorten wird das Setup mit WordPress 3.5 oder höher ms-files.phpdirekt umgangen und blogs.dirnicht verwendet.

Stattdessen werden Uploads in wp-content/blogs/{blog_id}solchen gespeichert und als solche bezeichnet. Dies bedeutet, dass es bei einer Installation in einer Subdomain nur eine Möglichkeit gibt, auf Dateien zuzugreifen, und bei einer Installation in einem Unterverzeichnis nur zwei.

Shea
quelle