Как использовать базовую аутентификацию для одного файла в другом запрещенном каталоге Apache?
Я хочу разрешить доступ к одному файлу в каталоге, который в противном случае запрещен.
Это не сработало:
<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/
каталог, но не браузер всплывающее окно входа из базовой аутентификации, поэтому базовая аутентификация не работает с файлом. Как я могу сделать исключение для allow.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>
...
2 ответа
Попробуй это:
<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>
Файлы, вложенные в Каталог, будут применяться только в нем, поэтому ваш блок кода будет более логично организован, и я думаю, что использование "Удовлетворить любого" позволит объединить их в соответствии с планом. Я не уверен, требуется ли это на самом деле, так что попробуйте с и без линии удовлетворения...
Я не уверен, что решение с <Files xxx>
на самом деле работает хорошо, так как страница Require doc утверждает, что она не относится к 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>