マルチサイトで検証していないので恐縮ですが…
拙作のプラグイン WP Basic Auth で対応できるかもです。
http://wordpress.org/plugins/wp-basic-auth/
このプラグインは有効にするだけで WordPress のユーザ名/パスワードでサイト全体に BASIC 認証がかかります。
ただし、画像ファイル等の静的ファイルについては BASIC 認証がかからないので注意してください。
あっ、wp-login.php にだけかけたいんですね。じゃぁ、ちゃんと .htaccess を書きなおさないとですね。
トピック投稿者
tk5
(@tk5)
wakamoto 様、
早速のご回答いただき大変ありがとうございます。
プラグイン WP Basic Auth はとても便利ですね。開発段階などでぜひ使わせていただきます。
今回はログインページのみにベーシック認証を使いたいと思っています。 .htaccess をどのように書き直せばいいのか、もし可能であれば、ご教示いただければありがたいです。
トピック投稿者
tk5
(@tk5)
初歩的なミスのようでした。
ベーシック認証の記述を「# BEGIN WordPress」より前(上)に記述したところ、ローカル環境ではうまくいきました。
<files wp-login.php>
AuthName "Login Password Required"
AuthType Basic
AuthUserFile c:\xampp\etc\.htpasswd
require valid-user
</files>
# BEGIN WordPress
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
# add a trailing slash to /wp-admin
RewriteRule ^([_0-9a-zA-Z-]+/)?wp-admin$ $1wp-admin/ [R=301,L]
RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^ - [L]
RewriteRule ^([_0-9a-zA-Z-]+/)?(wp-(content|admin|includes).*) $2 [L]
RewriteRule ^([_0-9a-zA-Z-]+/)?(.*\.php)$ $2 [L]
RewriteRule . index.php [L]
# END WordPress
但し、サーバー環境(サブドメインにマルチサイトをインストール)ではまだ、「このウェブページにはリダイレクト ループが含まれています」となってしまいます。
サーバー環境のインストールに問題があるのか、先日もプラグイン BackWPupをインストールしたところ最初に「 Warning: Cannot modify header information….」の表示が出たのですが、その後エラーはなくなり、またご紹介いただいたプラグイン WP Basic Auth をインストールしたところ以下のようなエラーが表示されます。
Notice: Undefined offset: 1 in /home/xxxx/public_html/wp/wp-content/plugins/wp-basic-auth/plugin.php on line 74
Warning: Cannot modify header information – headers already sent by (output started at /home/xxxx/public_html/wp/wp-content/plugins/wp-basic-auth/plugin.php:74) in /home/xxxx/public_html/wp/wp-content/plugins/wp-basic-auth/plugin.php on line 83
Warning: Cannot modify header information – headers already sent by (output started at /home/xxxx/public_html/wp/wp-content/plugins/wp-basic-auth/plugin.php:74) in /home/xxxx/public_html/wp/wp-content/plugins/wp-basic-auth/plugin.php on line 84
Authorization Required
いずれもローカル環境では問題ないのですが。。。
もう少し調べてみます。
トピック投稿者
tk5
(@tk5)
すみません。混乱してしまっているようです。ローカル環境では試していなかったようで、ベーシック認証の記述の位置は前でも後でもどちらでも問題ありません。
問題はやはりサーバー環境のほうのようです。しばらく時間をかけて調べてみます。
トピック投稿者
tk5
(@tk5)
取りあえず、以下を functions.php に記述するとログインにベーシック認証を利用できるようになりましたが、なぜ、.htaccess を使ってのベーシック認証では、サーバー環境で「このウェブページにはリダイレクト ループが含まれています」となってしまうのかはまだわかりません。どなたか、お分かりになれば教えていただければありがたいです。
add_action( 'login_init', 'basic_auth' );
function auth_login_init() {
if ( ! is_user_logged_in() ) {
basic_auth();
}
}
function basic_auth(){
$hashed_user = "B.7zvNlp.z/Pxy"; //暗号化されたユーザー名
$hashed_password = "10Lh53LdzKN1KZ"; //暗号化されたパスワード
if (isset($_SERVER['PHP_AUTH_USER']) and isset($_SERVER['PHP_AUTH_PW'])){
if (crypt($_SERVER['PHP_AUTH_USER'], $hashed_user) == $hashed_user && crypt($_SERVER['PHP_AUTH_PW'], $hashed_password) == $hashed_password){
return;
}
}
header('WWW-Authenticate: Basic realm="Restricted Area"');
header('HTTP/1.0 401 Unauthorized');
header('Content-type: text/html; charset='.mb_internal_encoding());
die("Authorization Failed. Contact your administrator." );
}
上記の関数「basic_auth()」をプラグイン WP Basic Auth の中の関数「basic_auth()」で置き換えると、WordPress のユーザー名とパスワードを利用することができました。但し、あまりセキュリティについての理解がないので、それで安全かどうか(上記のコードも含めて)わかりません。
トピック投稿者
tk5
(@tk5)
いろいろと途中経過は省略しますが、以下の2行を .htaccess に追加することで解決しましたので報告します。
ErrorDocument 401 "Denied"
ErrorDocument 403 "Denied"
結果的には、現在使用しているホスティングのサーバー上にサブドメインを作成している場合に上記のような現象が発生していたことになります。