wp-admin以外でもBasic認証の表示が出る場合の対策
wp-adminにしかBasic認証をかけていないにも関わらず、フロント画面でもBasic認証のモーダルが表示されてしまう場合の対策を記載しておきます。
前置き:エックスサーバーでのBasic認証設定
サーバーパネルの「ホームページ」>「アクセス制限」から、「wp-admin」をONにすることで簡単にBasic認証を設定することができます。
パスワードなどは、「ユーザー設定」の「ユーザーIDを追加」から行えます。
ただ、このままだとログイン画面以外でもBasic認証のモーダルが誤表示されることがあります。
入力をキャンセルすれば通常通りサイトを閲覧できますが、一般の訪問者であればここで離脱してしまう原因にもなりかねません。
原因:admin-ajax.phpへのアクセス
WordPressでは、プラグインなどが/wp-admin/配下のadmin-ajax.phpを利用して非同期通信(AJAX通信)を行うことがあります。
そのため、wp-adminにBasic認証を設定していると、フロント画面の閲覧時にも認証を求められる場合があります。
この場合、admin-ajax.phpのみBasic認証対象から除外することで解決します。
対処方法:.htaccessに追加
/wp-admin/.htaccessに以下を追加。
<Files "admin-ajax.php">
Require all granted
</Files>※エックスサーバーであれば、「FTP」>「FTPアカウント設定」の管理ボタンから直接編集可能です。
これにより、
- 管理画面(wp-admin)はBasic認証で保護
- フロント側のAJAX通信は正常動作
という状態になります。
追加した場合、こんな感じになります。
AuthUserFile "/home/xxx/xxx.com/htpasswd/wp-admin/.htpasswd"
AuthName "Member Site"
AuthType BASIC
require valid-user
<Files "admin-ajax.php">
Require all granted
</Files>確認方法
/wp-admin/admin-ajax.php へアクセスして、以下のいずれかであれば成功です。
- モーダル出ない
0が表示される
本来はwp-login.phpにかけるべき
管理画面にアクセスした際、ログインしていなければ最終的にはwp-login.phpにリダイレクトされます。
/wp-admin/:管理画面wp-login.php:ログイン画面
/wp-admin/を保護していたとしても、wp-login.phpには直接アクセスできてしまうため、完全に攻撃を防ぐことはできません。
そのため、どちらかというとログイン画面(あるいは両方)を保護する方がより安全です。
エックスサーバー等の仕様上、設定画面からはディレクトリ単位でしかBASIC認証をかけられないため、wp-login.phpには手動で設定します。
/wp-admin/の方で生成されたコードをそのまま<Files "wp-login.php">で囲って、WordPressがインストールされている階層(public_html直下など)の.htaccessに追記します。
<Files "wp-login.php">
AuthUserFile "/home/xxx/xxx.com/htpasswd/wp-admin/.htpasswd"
AuthName "Member Site"
AuthType BASIC
require valid-user
</Files>これで、管理画面、ログイン画面両方保護することができました。
まとめ
以上、Basic認証の対策でした。
wp-adminにBasic認証をしている場合、あらかじめadmin-ajax.phpは除外しておくことを忘れずに。

カスタマイズに困ったらお気軽にご相談を!
- 「ちょっとしたCSSの調整だけお願いしたい」
- 「不具合を直してほしい」
料金は3,000円〜、お支払いは銀行振込・Amazonギフトカードなど柔軟に対応してます🤔
お気軽にコメントどうぞ