.htaccess で Basic認証 か IP アクセス制限どちらかでサイトにアクセス可にする方法

開発サイトなどで、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>

参考記事