2011/01/06

htaccess で特定のファイルのみパスワードを要求しない

Web コンテンツを保護するために .htaccess ファイルを用いて Basic 認証などを実施する場合は多い。
通常 .htaccess はディレクトリ単位で有効になってしまうのだが、 あるディレクトリのアクセスを Basic 認証でアクセス制御したいが 特定のファイルについては認証を要求しない設定を行いたい場合は Files ディレクティブと Satisfy ディレクティブで実現できる。

AuthType        Basic
AuthUserFile    認証用ファイル
AuthName        "Enter password"
Require         valid-user
<Files "認証要求しないファイル">
    Satisfy     Any
    Allow       from all
</Files>
	

Satisfy ディレクティブは Allow ディレクティブと Require ディレクティブがどちらも使われている場合の アクセスポリシーを制御する。
Any が指定された場合は AllowRequire のどちらかの条件を満たせばアクセスが許可されるので、 Files ディレクティブで指定したファイルに対しては Allow 指定が有効になり認証なしでアクセスが許可される。

逆にある特定のファイルだけの Basic 認証によるアクセス制御は Files ディレクティブのみで可能である。

AuthType        Basic
AuthUserFile    認証用ファイル
AuthName        "Enter password"
<Files "認証要求するファイル">
    Require     valid-user
</Files>
	

どちらの場合も Files ディレクティブは以下の様に ~ を使う事でファイル名を正規表現で記述できる。

<Files ~ "\.(gif|jpe?g|png)$">
	:
</Files>
	
apache では PCRE - Perl Compatible Regular Expressions を 利用しているので複雑な正規表現の記述ができる様だ。


Copyright © Mitzyuki IMAIZUMI 2008,2009. All rights reserved.