Do You PHP はてな このページをアンテナに追加 RSSフィード

2008-03-03

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

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

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

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

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

<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. <Directory> (正規表現無し) と .htaccess を同時に (.htaccess が許可されていれば、それが <Directory> を上書きします)

2. <DirectoryMatch> (と <Directory ~>

3. <Files> と <FilesMatch> を同時に

4. <Location> と <LocationMatch> を同時に

<Directory> 以外は、それぞれのグループは設定ファイルに現れた順番に処理されます。 <Directory> (上のグループ 1) はディレクトリが短いものから長いものへと処理されます。

                :

後のセクションのディレクティブが前のセクションのものを上書きします。

セクションのマージ方法 - セクションの設定 - Apache HTTP サーバ

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

スパム対策のためのダミーです。もし見えても何も入力しないでください
ゲスト


画像認証