ワードプレスの管理画面にBasic認証かけてますか?

先日、管理画面(/wp-admin/)にBasic認証を入れたはずなのに、なぜかフロントページでBasic認証を要求されちゃって参りました…。

原因を調べる方法と解決方法をまとめておきます。

ワードプレスプレスの管理画面(wp-admin)にBasic認証をかけたのにおかしい

今使っているXサーバーは、/wp-admin、/wp-login.php、XML-RPC APIの国外IPアドレス接続制限、ログイン試行回数制限設定が標準で設定されていて、一時期騒がれたブルートフォースアタック対策がされてたんですね。

個人の小さなブログだから、まぁ管理画面(/wp-admin/)にBasic認証かけなくてもいっか、と放置してたんですよ。

でも最近アクセスも増えてきたし、ハッキングされてサイト閉鎖に追い込まれたら嫌だなぁと思ってベーシック認証を入れました。

wp-admin-basic-auth
▲ワードプレスプレスの管理画面にBasic認証

/wp-admin/以外でも、Basic認証がでる

/wp-admin/のみにBasic認証を入れたのに、記事ページを閲覧するとBasic認証がでてくるんです。
しかも、ID・PWを入力せずにキャンセルしても正常に表示されるんです。
…何でだよ。。

wp-admin-basic-auth2

なんだこれ?って意味がわからない状態になりました。もちろんサイト全体にBasic認証をかけたという間違いは犯してませんよ。

原因を調べる方法と解決方法まとめ

スマートに書きますが…Twitterのフォロワーさんにアドバイスをもらい解決に至りました。

サーバーのログを確認します

サーバーのログを確認したところ、記事ページを開いているのにwp-admin/admin-ajax.php にアクセスしているのが判明!

wp-admin-basic-auth3

素人なりに詳しく解説しますと、ぼくのケースではワードプレスの管理画面(/wp-admin/)にBasic認証を記述した.htaccessファイルを設置しました。

当然、管理画面のログイン画面(wp-login.php)にアクセスしようとすると認証が必要になります。

Basic認証対象:https://netotas.net/wp-admin/以下すべて

ところが、記事ページを閲覧しようとする時に、内部的にwp-admin/admin-ajax.phpにアクセスしているのです。/wp-admin/配下はBasic認証がかかっているので認証を要求されていたというわけです。

サーバーのログ確認方法

ちなみにレンタルサーバーの場合、サーバ管理パネルからログをダウンロードできます。Xサーバーの場合で、下部で説明します。

特定ファイル(wp-admin/admin-ajax.php)をBasic認証から除外する

wp-admin-basic-auth4

wp-adminデイレクトリにBasic認証を記述した.htaccessファイルを設置していました。

Basic認証を記述した.htaccessファイル

AuthUserFile "~/.htpasswd"
AuthName "パスワードを入力してください"
AuthType BASIC
require valid-user
</Files>

特定ファイルを除外する.htaccessファイル

AuthUserFile "~/.htpasswd"
AuthName "パスワードを入力してください"
AuthType BASIC
require valid-user

<Files admin-ajax.php>
Satisfy any
allow from all
</Files>

このように記述することで、特定ファイル(wp-admin/admin-ajax.php)をBasic認証から除外することができます。

これで完了です。記事ページにアクセスしてみると、Basic認証を要求されなくなりました!

トラブルと解決方法の補足

原因がわかってしまえば対策は打てるけど、原因不明だと難しいんですよね。しかも、そういう状況のときは何てキーワードで検索したらよいか分からない...。

今回のトラブル解決の鍵は、ログファイルでした!

xサーバーでのログファイルのダウンロード手順

Xサーバーのサーバーパネルにログインします。
統計>ログファイル
wordpress-log1

対象ドメインを選択します
wordpress-log2

対象のサイトドメインの[ダウンロード]をクリック
wordpress-log3

サイトドメイン.access_logというファイルがダウンロードできます。
(ぼくの場合は、netotas.net.access_log)

メモ帳などテキストエディタでログを閲覧できます。

解決できてよかった!

このつぶやきを見て、アドバイスをくれてフォロワーさんありがとうございました!