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.dir
in 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.php
verarbeitet 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_id
ist 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 all
durch verschieben, .htaccess
sodass 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.php
wäre ein guter Ort, um solchen Code hinzuzufügen.