他の方法では禁止されているディレクトリ内の単一ファイルへのアクセスを許可したい。
これは機能しませんでした:
<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
の禁止メッセージが表示されますhttp://example.com/admin/
ディレクトリですが、基本認証からのブラウザログインポップアップではないため、基本認証はファイルに対して機能しません。どうすればallowed.phpの例外を作成できますか?
不可能な場合は、禁止されているすべてのファイルを別のFilesディレクティブで列挙できますか?
Admin /にuser.phpとadmin.phpも含まれているとしましょう。これらはこの仮想ホストでは禁止されています。
編集:次の変更も試して、イグナシオの回答からのアドバイスに従って、同じ結果「禁止」を取得しました。
...
# 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>
...
これを試して:
<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>
ディレクトリ内にネストされたファイルはそこにのみ適用されるため、コードブロックはより論理的に編成され、「Satisfyany」を使用すると計画どおりにマージできると思います。実際に必要かどうかわからないので、satisfyラインの有無にかかわらず試してみてください...
ドキュメントページが必要 はFiles
には適用されないと述べているため、<Files xxx>
を使用したソリューションが実際にうまく機能するかどうかはわかりません。
Context: directory, .htaccess
代わりに、Apache docが提案するのは、ファイル用に別のディレクトリを作成することです。
サブディレクトリのコントロールを削除する
次の例は、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>