例外パスを設けたWordPress用のBasic認証を.htaccessで設定してみた

WordPress環境のBasic認証、ヘルスチェックなど特定のパスを例外とした設定を「.htaccess」で設定してみました。
2022.07.07

EC2上で稼働するWordPress環境のBasic認証を.htaccessで設定する機会がありましたので紹介させていただきます。

環境

OS

$ cat /etc/system-release
Amazon Linux release 2 (Karoo)

httpd

$ rpm -q httpd httpd-tools
httpd-2.4.53-1.amzn2.aarch64
httpd-tools-2.4.53-1.amzn2.aarch64

設定

.htpasswd

「htpasswd」コマンドを利用して.htpasswd ファイルの生成を行いました。

htpasswd -c /var/www/html/.htpasswd <user>

.htaccess

  • WordPressのインストールパスに存在する.htaccess の前に Basic認証用の設定を追記しました。
  • ELBのヘルスチェックで利用する「/wp-json/wp/v2/statuser」と「wp-cron」 を認証対象外としました。
  • WordPressのリダイレクトに対応するため、リダイレクトの環境変数を利用しました。
  • .htpasswd、.htaccess の参照は禁止しました
AuthUserFile /var/www/html/.htpasswd
AuthGroupFile /dev/null
AuthName "Basic Authentication"
AuthType Basic
require valid-user
Require env noauth REDIRECT_noauth
SetEnvIf Request_URI /wp-json/wp/v2/statuses noauth
SetEnvIf Request_URI /wp-cron.php noauth

<Files ~ "^.(htpasswd|htaccess)$">
  deny from all
</Files>

# BEGIN WordPress
# "BEGIN WordPress" から "END WordPress" までのディレクティブ (行) は
# 動的に生成され、WordPress フィルターによってのみ修正が可能です。
(略)

動作確認

curl コマンドを利用して、HTTPレスポンスコードを確認しました。

Basic認証対象

「/」の参照は 401応答となりました。

curl https://${ELB_FQDN}>/ -o /dev/null -w '%{http_code}\n' -s
401

Basic認証のIDとパスワード文字列を指定する事で、200応答が得られました。

curl https://${ELB_FQDN}>/ -o /dev/null -w '%{http_code}\n' -s -u <ID>:<PASSWORD>
200

認証対象外

Basic認証対象外としたパスは、200応答が得られました。

curl https://{ELB_FQDN}/wp/v2/statuses/ -o /dev/null -w '%{http_code}\n' -s
200

まとめ

一般公開前、開発中のWordPress環境にBasic認証を導入した場合、 ELBなどのヘルスチェックや、WordPress自身のAPI呼び出しの遮断が問題となる場合、今回の設定をお試し下さい。