特定の URL のみ Basic 認証をかける・除外する (Apache 2.2)

Apache 2.2 を使用している Web サーバで、 .htaccess のみを使い特定の URL のみ Basic 認証を外す必要があり調べた。

特定の URL のみ Basic 認証をかける

## Allow と Require のいずれかの許可があればアクセス可能にする
Satisfy Any

## /members/ で始まる URL へのアクセスを禁止する
SetEnvIf REQUEST_URI "^/members/" restricted_url
Order allow,deny
Allow from all
Deny from env=restricted_url

## /members/ 以下でも Basic 認証を通過すればアクセスできる
AuthUserFile "/path/to/.htpasswd"
AuthGroupFile /dev/null
AuthName "Restricted Files"
AuthType Basic
require valid-user

ここで SetEnvIf に指定している "^/members/" の部分は正規表現で記述する。単に "/members/" と記述すると /sub/members/directory にもマッチするので注意。

特定の URL のみ Basic 認証を除外する

## Allow と Require のいずれかの許可があればアクセス可能にする
Satisfy Any

## /images/ で始まる URL へのアクセスを常に許可する
SetEnvIf REQUEST_URI "^/images/" allowed_url
Order deny,allow
Deny from all
Allow from env=allowed_url

## それ以外の URL は Basic 認証を通過すればアクセスできる
AuthUserFile "/path/to/.htpasswd"
AuthGroupFile /dev/null
AuthName "Restricted Files"
AuthType Basic
require valid-user