
通常は禁止されているディレクトリ内の 1 つのファイルへのアクセスを許可したいと思います。
これは機能しませんでした:
<VirtualHost 10.10.10.10:80>
ServerName example.com
DocumentRoot /var/www/html
<Directory /var/www/html>
Options FollowSymLinks
AllowOverride None
order allow,deny
allow from all
</Directory>
# disallow the admin directory:
<Directory /var/www/html/admin>
order allow,deny
deny from all
</Directory>
# but allow this single file::
<Files /var/www/html/admin/allowed.php>
AuthType basic
AuthName "private area"
AuthUserFile /home/webroot/.htusers
Require user admin1
</Files>
...
</VirtualHost>
アクセスすると、ディレクトリhttp://example.com/admin/allowed.php
の Forbidden メッセージは表示されますhttp://example.com/admin/
が、基本認証からのブラウザ ログイン ポップアップは表示されないため、ファイルでは基本認証が機能しません。allowed.php に対して例外を作成するにはどうすればよいでしょうか?
不可能な場合は、別の Files ディレクティブですべての禁止ファイルを列挙できるでしょうか?
admin/ には、この仮想ホストで禁止する必要がある user.php と admin.php も含まれているとします。
編集:また、Ignacio の回答のアドバイスに従って、次の変更も試してみましたが、結果は同じ「禁止」でした。
...
# disallow the admin directory:
<Directory /var/www/html/admin>
order allow,deny
deny from all
</Directory>
# but allow this single file::
<Files /var/www/html/admin/allowed.php>
order allow,deny
allow from all
AuthType basic
AuthName "private area"
AuthUserFile /home/webroot/.htusers
Require user admin1
satisfy all
</Files>
...
答え1
これを試して:
<Directory /var/www/html/admin>
<Files allowed.php>
AuthType basic
AuthName "private area"
AuthUserFile /home/webroot/.htusers
Require user admin1
</Files>
order allow,deny
deny from all
satisfy any
</Directory>
ディレクトリ内にネストされたファイルはそのディレクトリ内でのみ適用されるため、コード ブロックはより論理的に整理され、「Satisfy any」を使用すると、計画どおりにマージできると思います。実際に必要かどうかはわかりませんので、satisfy 行の有無で試してみてください...
答え2
<Files xxx>
この解決策が実際にうまく機能するかどうかはわかりません。ドキュメントページが必要適用されないと述べているFiles
Context: directory, .htaccess
代わりに、Apache のドキュメントでは、ファイル用に別のディレクトリを作成することが提案されています。
サブディレクトリ内のコントロールを削除する
次の例は、Satisfy ディレクティブを使用して、保護されたディレクトリのサブディレクトリ内のアクセス制御を無効にする方法を示しています。この手法は、mod_authz_host によって課されるアクセス制御も無効にするため、注意して使用する必要があります。
<Directory /path/to/protected/>
Require user david
</Directory>
<Directory /path/to/protected/unprotected>
# All access controls and authentication are disabled
# in this directory
Satisfy Any
Allow from all
</Directory>