開発サイトなどで、BASIC 認証自体をテストしたい時がありました。
つまり、通常、開発サイト全体で Basic 認証をかけているのに、本番でも Basic 認証を使いたいから、そのテストを開発環境でもしたいというケースです。
Basic 認証は二重にかけることはできません。
なので、考えた案は以下の通り。
- 関係者の IP アドレスを .htaccess で指定して、それらの IP アドレスからは、サイト全体の BASIC 認証は不要にする
- 関係者の IP アドレスからアクセスした時のみ、Basic 認証のテストができる
.htaccess の例です。
# Basic 認証の設定。ただし Require valid-user の位置が違うことに注目
AuthType Basic
AuthName "Input your ID and Password."
AuthUserFile /var/www/vhosts/example.com/.htpasswd
# PHP などに BASIC 認証の渡す時に必要
SetEnvIf Authorization "(.*)" HTTP_AUTHORIZATION=$1
# RequireAny で OR な条件をつけ、IP で許可するか BASIC 認証で許可するかを設定する
<RequireAny>
# 自分の IP
Require ip XXX.XXX.XXX.XXX/32
# お客さんの IP
## 必要に応じて Require IP を追加
Require ip XXX.XXX.XXX.XXX/16
# Basic 認証を通ったユーザー
Require valid-user
</RequireAny>
参考記事
- Apache で Basic 認証の値が PHP などに渡っていない時の対処法
- https://qiita.com/katzueno/items/844a7e4b0c5c8df2d99b
- Nginx で特定パスだけ Basic 認証をかける (Concrete CMS ログインページ等)
- https://qiita.com/katzueno/items/b6b28d12c4105b4c133d
- Apache 2.4 系で IP アドレスなどのアクセスブロックをする方法
- https://qiita.com/katzueno/items/4cf15117d228dbaf2448