Do You PHP はてブロ

Do You PHPはてなからはてブロに移動しました

特定のサブディレクトリに別のBASIC認証をかける

BASIC認証のかかっているディレクトリがあり、そのサブディレクトリに別のBASIC認証をかけたい場合があったのでメモ。

たとえば、http://example.com/hoge/ にすでにBASIC認証がかけられているが、http://example.com/hoge/fuga/ に別のBASIC認証「だけ」をかけたい、といった場合です。

簡単に考えると、ディレクティブやディレクティブを2つ並べればうまくいきそうなもんですが、両方の認証がかかってしまいます。

そこで、ディレクティブとディレクティブの両方を使うと期待通りに動作しました。具体的な設定例は次の通り。

<Location ~ "^/hoge/fuga">
    AuthType Basic
    AuthUserFile /path/to/.htpasswd.fuga
    AuthName "Enter password for fuga"
    Require valid-user
</Location>
<Directory "/path/to/hoge/">
    AuthType Basic
    AuthUserFile /path/to/.htpasswd.hoge
    AuthName "Enter password"
    Require valid-user
</Directory>

これは


マージの順番は以下のようになっています:

1. (正規表現無し) と .htaccess を同時に (.htaccess が許可されていれば、それが を上書きします)
2. (と
3. を同時に
4. を同時に

以外は、それぞれのグループは設定ファイルに現れた順番に処理されます。 (上のグループ 1) はディレクトリが短いものから長いものへと処理されます。
                :
後のセクションのディレクティブが前のセクションのものを上書きします。

のとおり、ディレクティブの設定がディレクティブの設定を上書いているためです(のハズ)。