
Quiero permitir el acceso a un único archivo en un directorio que de otro modo estaría prohibido.
Esto no funcionó:
<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>
Cuando lo visito, http://example.com/admin/allowed.php
aparece el mensaje Prohibido del http://example.com/admin/
directorio, pero no la ventana emergente de inicio de sesión del navegador de la autenticación básica, por lo que la autenticación básica no funciona en el archivo. ¿Cómo puedo hacer una excepción para permitido.php?
Si no es posible, ¿tal vez podría enumerar todos los archivos prohibidos en otra directiva de Archivos?
Digamos que admin/ también contiene user.php y admin.php, que deberían estar prohibidos en este host virtual.
Editar:También probé la siguiente modificación, intentando seguir los consejos de la respuesta de Ignacio, con el mismo resultado 'Prohibido':
...
# 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>
...
Respuesta1
Prueba esto:
<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>
Los archivos anidados dentro de un directorio solo se aplicarán allí para que su bloque de código esté organizado de manera más lógica, y creo que usar 'Satisfacer cualquiera' permitirá que se fusionen según lo planeado. No estoy seguro de si realmente es necesario, así que pruébalo con y sin la línea de satisfacción...
Respuesta2
No estoy seguro de que la solución <Files xxx>
realmente funcione bien, ya queRequerir página de documentoafirma que no se aplica aFiles
Context: directory, .htaccess
En cambio, lo que sugiere el documento de Apache es crear un directorio separado para el archivo:
Eliminar controles en subdirectorios
El siguiente ejemplo muestra cómo utilizar la directiva Satisfy para deshabilitar los controles de acceso en un subdirectorio de un directorio protegido. Esta técnica debe usarse con precaución, porque también deshabilitará cualquier control de acceso impuesto por 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>