特定のドメインのときのみBASICをかける(.htaccess)

探しても意外とちゃんと動くサンプルがなかったので、結構苦労しました。

    Satisfy any

    SetEnvIf Host "test\.domein\.com$" test_host
    Order allow,deny
    Allow from all
    Deny from env=test_host

    AuthUserFile "/var/www/test/domein/.htpasswd"
    AuthName "Please enter ID and Password."
    AuthType Basic
    require valid-user
  1. 最初に「Satisfy any」して全開放しておいて、「SetEnvIf Host」で命名しておいてからDenyする
  2. Denyのときのみその下のBasicが呼ばれる

という手順になるようです。(BasicとDenyfromのブロックの順番は無関係)

Denyされる ≒ Basicが呼ばれる」ということをちゃんと理解していなかったので時間がかかりました。

「SetEnvIf」の内部は正規表現なのでお気をつけ。
(SetEnvせずにDeny from でホスト直書きしようとしたら確か上手くいかなかったので、ちゃんとSetEnvする必要があるっぽい?)

参考にさせていただいたのはこのあたり。
.htaccessっていつまで経っても謎なところがあるんだよねぇ。難しい。

htaccessを用いて、特定のホストのみBasic認証を行うようにする… - 人力検索はてな

.htaccess の使い方や書き方・設置方法/ Web Design Leaves