it-swarm.com.de

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

Wordpress scheint zuzulassen, dass Inhalte von vielen URIs in einer MU-Installation angesprochen 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 an den gleichen Ort zu gelangen. Gibt es mehr Aliase? Welches ist kanonisch? Sind irgendwelche von diesen zufällig? Gibt es relevante Filter?

9
wowest

Kurze Antwort

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

Lange Antwort

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

WordPress Multisite speichert Dateien nach blog_id (die "5" nach "/blogs.dir/"), um die Organisation zu gewährleisten und die Dateien verschiedener Websites zu trennen. Diese Verzeichnisstruktur soll nicht öffentlich sein. WordPress verwendet Umschreiberegeln, um ^files/(.+) an wp-includes/ms-files.php?file=$1 weiterzuleiten. Anschließend verarbeitet wp-includes/ms-files.php das Bild und/oder einige hilfreiche Überschriften und gibt sie aus. Dies hat einige Vorteile:

  • Aus Sicherheitsgründen sind weniger Informationen immer besser. "wp-content/blogs.dir/5" ist ein kleines TMI - es besagt, dass Sie WordPress Multisite ausführen und der blog_id 5 ist.
  • Die URL-Struktur ist identisch mit der einer Einzelstandortinstallation. Wenn Sie jemals eine Site aus einer Multisite-Installation in eine eigene verschieben würden, müssten Sie diese Referenzen in der Datenbank nicht aktualisieren oder die alten Pfade für externe Referenzen aktualisieren.
  • Sie können das Dateiverzeichnis aus dem öffentlichen Zugriff oder von deny from all nach .htaccess verschieben, sodass Benutzer beispielsweise nicht auf die ursprünglichen Bildgrößen zugreifen können, wenn Sie dies nicht möchten.
  • Sie können bestimmten Dateien eine Zugriffssteuerung hinzufügen

Es gibt einen Hauptnachteil, nämlich, dass die Bilder/Dateien PHP durchlaufen (und möglicherweise sogar einige MySQL-Abfragen erfordern), 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 im Prozess leicht filtern: Weder mu-plugins , plugins noch Ihr Design 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, drop-ins do. Auch wenn Sie keine Standard-Plugins verwenden können, bildet WordPress dennoch die Grundlage für alle erforderlichen Aktionen, z. B. (wie oben erwähnt) die Zugriffssteuerung für vertrauliche Dateien. Das Drop-In sunrise.php ist ein guter Ort, um solchen Code hinzuzufügen.

4
Matthew Boynes

Bei Installationen mit mehreren Standorten mit WordPress 3.5 oder höher wird ms-files.php direkt umgangen, und blogs.dir wird nicht verwendet.

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

2
shea