web-dev-qa-db-ja.com

"Vanilla" MUインストールで許容されるアセットURLはどれですか?

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

すべてが同じ場所にルーティングしているように見えます。もっとエイリアスはありますか?どれが標準的ですか?これらのうちのどれかが偶然ですか?関連するフィルターはありますか?

9
wowest

短い答え

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が画像や有用なヘッダーを処理して出力します。これにはいくつかの利点があります。

  • セキュリティの面では、少ない情報が常に優れています。 "wp-content/blogs.dir/5"はちょっとしたTMIです - それはあなたがWordPress Multisiteを実行していて、blog_idが5であることを示しています。
  • URL構造は、単一サイトインストールのものと同じです。サイトをMultisiteのインストールから別のサイトに移動する場合は、データベース内のこれらの参照を更新したり、外部参照用の古いパスを更新する必要はありません。
  • Filesディレクトリをパブリックアクセスから、または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は、そのようなコードを追加するのに適した場所です。

4
Matthew Boynes

WordPress 3.5以降のマルチサイトインストールセットアップでは、ms-files.phpは直接バイパスされ、blogs.dirは使用されません。

代わりに、アップロードはwp-content/blogs/{blog_id}に保存され、そのように呼ばれます。つまり、サブドメインのインストールではファイルにアクセスする方法は1つのみ、サブディレクトリのインストールでは2つだけです。

2
shea