かもメモ

自分の落ちた落とし穴に何度も落ちる人のメモ帳

WordPress 管理画面のベーシック認証が効かなくなった時のメモ

WordPressを設置する時に少しでもセキュリティを高めるために管理画面やログイン画面にベーシック認証をかけています。
ファイル構成

/
|- .htaccess
|- /wp
|   |- .htaccess
|   |- .htpasswd
|   |- /wp-admin
|- index.php

WordPresswpディレクトリ内に置き、wpディレクトリ内の.htaccessでログイン画面(wp-login.php)にベーシック認証をかけていました。 今回なぜか/wp/wp-admin/でログイン画面にアクセスしようとするとexample.com/wp/wp-login.php?redirect_to=http%3A%2F%2Fexample.com%2Fwp%2Fwp-admin%2F&reauth=1にリダイレクトされエラーページ(404テンプレート)が表示されてしまう現象に遭遇しました。

ログイン画面のベーシック認証

/wp/.htaccess は次のような感じです。
簡易にwp-login.phpにベーシック認証をかけ、パーミッションを400にしてあるwp-config.phpも念のため直接アクセスを禁止する感じにしていました。

# wp-login.php にベーシック認証をかける
<files wp-login.php>
 AuthUserFile /webroot/wp/.htpasswd
 AuthGroupFile /dev/nul
 AuthName "Username and Password"
 AuthType Basic
 require valid-user
</files>

# wp-config.php への直接アクセスを禁止
<files wp-config.php>
 Order deny,allow
 deny from all
</files>

エラーページの指定 (ErrorDocument) が原因だった!

ベーシック認証が表示されず、ログイン画面に遷移しないでエラーページ(404テンプレート)が表示されていた問題は、/.htaccessに書いていたエラーページの指定 ErrorDocument が原因でした。
エラーコードが401の時の設定を ErrorDocument 401 404.html のように指定していしている。かつ ログイン画面にベーシック認証をかけていると、今回のようなリダイレクトパラメータが付いた画面になりログイン画面が表示されないという現象になってしまうようです。ログイン画面にベーシック認証を書けていない場合はErrorDocument 401 が指定されていても問題なく動作しました。
ErrorDocument 401 の指定を消すか、次のように書き換えればば問題は解決されました。

ErrorDocument 401 default

wp-login.phpだけでなく/wp-adminディレクトリ下にベーシック認証を書けている場合もErrorDocument 401default以外だと、同様にログイン画面が表示されなくなってしまいます。

 
まさか、ErrorDocument の指定に問題があるとは思いもしなかったので、問題の解決に結構時間がかかってしまいました。日本語で検索しても全然ヒットしなかったのでw
やはりWEB関連のトラブルの際は全て英語のキーワードで検索してみるのが近道ダナ(・x・) と実感したのでした。


[参考]

一歩先にいくWordPressのカスタマイズがわかる本

一歩先にいくWordPressのカスタマイズがわかる本