各サブサイトのコンテンツには、それぞれのサイトにログインしているユーザーしかアクセスできないマルチサイトイントラネット(サブドメインを使用)を設定しようとしています。私が抱えている問題は、アップロードされたファイルへのアクセスを制限しようとしていることです(例: http://example.org/wp-content/uploads/2011/12/dummy.pdf )ログインユーザーのみ。
ユーザーがログインしていない場合にアップロードを保護する方法 と同様に、hakreまたはFrank Bueltgeによって提案された解決策の1つをマルチサイト用に有効にする方法インストール?
私はネットとWordress Answersを精査してきましたが、うまくいくことができなかったのです。関連する回答は以下のとおりです。
また、私はPHPに慣れていないので、WordPressが内部でどのように機能するのかをまだ学習しています。
ありがとうございます。
いい質問ですね。
ちょっとそれを覗いて、これはうまくいっているようです(さらなるテストとより修飾された外観は大歓迎です):サブドメインを使用したlocalhost開発インストールでのみテスト済み。ドメインマッピングはありません。
次の.htaccess
書き換えルールを変更します。
# uploaded files
# RewriteRule ^files/(.+) wp-includes/ms-files.php?file=$1 [L]
RewriteRule ^files/(.+) dl-files.php?file=$1 [L]
/wp-includes/ms-files.php
のコピーを作成し、それをdl-files.php
という名前でルートに置きます。
SHORTINIT
を無効にし、wp-load.php
パスを修正し、最初にcurrent_user_can()
チェックを追加すると、以下のようになります。
<?php
/**
* Modified Multisite upload handler.
*
* @since 3.0.0
*
* @package WordPress
* @subpackage Multisite
*/
//define( 'SHORTINIT', true );
require_once( 'wp-load.php' );
if( !is_multisite() )
die( 'Multisite support not enabled' );
if( !current_user_can( 'subscriber' ) ) {
status_header( 403 );
die( '403 — Forbidden.' );
}
ms_file_constants();
/* ... rest of the original file ... */
SHORTINIT
を削除すると、ロード時間とメモリ消費量が増加することに注意してください。どこかで読んでください。これは10倍になる可能性があります(!?)。
で興味深い議論 wp-edu list(wp-hackersには何も見つかりませんでした):