現在、htaccessを使用して、ディレクトリ内のすべてのPHPファイルへのアクセスを拒否していますが、同じディレクトリ内のJS、PNG、CSSファイルは拒否していません。
<FilesMatch "\.php$">
Order deny,allow
Deny from all
</FilesMatch>
ただし、1つのファイル(たとえば、「foobar.php」)を例外にしたい場合はどうなりますか? 1つのhtaccessで複数のステートメントを記述できますか?実行の順序は何ですか?
1つのhtaccessで複数のステートメントを記述できますか?
はい、できます。同じcontext内の複数の<FilesMatch>
コンテナ(つまり、.htaccess
)は順番にマージされます。したがって、すべての.php
ファイルをブロックし、特定のfoobar.php
ファイルをこの順序で許可できます。
例えば:
# Block all ".php" files
<FilesMatch "\.php$">
Order deny,allow
Deny from all
</FilesMatch>
# Permit a specific ".php" file
<FilesMatch "^foobar\.php$">
Order deny,allow
Allow from all
</FilesMatch>
または、単一の<FilesMatch>
コンテナを使用し、正規表現でnegative lookaheadを使用して、特定のファイルを除外できます。
# OR use a negative lookahead...
<FilesMatch "^(?!foobar\.php$).+\.php$">
Order deny,allow
Deny from all
</FilesMatch>
否定先読み表明(?!foobar\.php$)
は、他のすべてのfoobar.php
ファイルと一致する一方で、正規表現が.php
と一致しないことを保証します。
Order
、Deny
、Allow
は厳密にApache 2.2のディレクティブであることに注意してください。 Apache 2.4を使用している場合は、おそらくこれをそれぞれRequire all denied
およびRequire all granted
に変更する必要があります(システム全体でmod_authz_coreに変更した場合)。
<FilesMatch>
コンテナは現在のディレクトリとすべてのサブディレクトリに適用されることにも注意してください。