Wordpressは、MUインストールで多くのURIでコンテンツを処理できるようにします。例えば:
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
すべてが同じ場所にルーティングしているように見えます。もっとエイリアスはありますか?どれが標準的ですか?これらのうちのどれかが偶然ですか?関連するフィルターはありますか?
example.com/bob/files/picture.jpgは、WordPressマルチサイトインストールでの画像の推奨される正規のURLです。 URL内のblogs.dir
を持つ2つのURLは本質的に同一であり、どちらもファイルシステム構造を利用します。サブドメインのインストールではなく、サブディレクトリのインストールを行ったため、 'bob'のパスが存在します。他のパスはあなたの他のサイトに基づいて存在するでしょう、例えばexample.com/fred/wp-content/blogs.dir/5/files/pictures.jpgそれ以外の場合、他のパスは存在しません。
このプロセスについて説明できることはたくさんありますが、私が探している詳細のレベルについて100%確信があるわけではないので、ここで基本について説明します。
WordPress Multisiteは、ファイルをblog_id
( "/blogs.dir/"の後の "5")で保存し、整理してさまざまなサイトのファイルを区別します。このディレクトリ構造は公開されることを意図していません。 WordPressは書き換え規則を使用して^files/(.+)
をwp-includes/ms-files.php?file=$1
にルーティングし、次にwp-includes/ms-files.php
が画像や有用なヘッダーを処理して出力します。これにはいくつかの利点があります。
blog_id
が5であることを示しています。deny from all
から.htaccess
までに移動することができます。そのため、たとえば、望まない場合は他の人が元の画像サイズにアクセスすることはできません。主な欠点が1つあります。それは、画像/ファイルがPHPを通過していること(および場合によってはいくつかのMySQLクエリも必要とすること)であるため、より多くのリソースが必要なことです。キャッシングプラグインがインストールされている場合、追加のリソースはごくわずかです。
フィルタに関しては、1つの理由で処理中に何かを簡単にフィルタすることはできません。どちらも mu-plugins 、プラグイン、またはテーマがロードされることはありません*。あなたができる最善のことはwp-config.phpの定数を上書きすることです。これはあなたが上書きすることができる最も有用で関連性のある定数です:
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 );
*プラグインはロードされませんが、 ドロップイン はロードされます。したがって、標準のプラグインを使用することはできませんが、WordPressは、機密ファイルにアクセス制御を追加するなど、必要なことをすべて行うための基盤を築いています。ドロップインsunrise.php
は、そのようなコードを追加するのに適した場所です。
WordPress 3.5以降のマルチサイトインストールセットアップでは、ms-files.php
は直接バイパスされ、blogs.dir
は使用されません。
代わりに、アップロードはwp-content/blogs/{blog_id}
に保存され、そのように呼ばれます。つまり、サブドメインのインストールではファイルにアクセスする方法は1つのみ、サブディレクトリのインストールでは2つだけです。