
Quero permitir o acesso a um único arquivo em um diretório que de outra forma seria proibido.
Isso não funcionou:
<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>
Quando eu visito, http://example.com/admin/allowed.php
recebo a mensagem Proibida do http://example.com/admin/
diretório, mas não o pop-up de login do navegador da autenticação básica, portanto a autenticação básica não funciona no arquivo. Como posso abrir uma exceção para permitido.php?
Se não for possível, talvez eu possa enumerar todos os arquivos proibidos em outra diretiva Arquivos?
Digamos que admin/ contenha também user.php e admin.php que deveriam ser proibidos neste host virtual.
Editar:Também tentei a seguinte modificação, tentando seguir o conselho da resposta de Ignacio, com o mesmo resultado 'Proibido':
...
# 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>
...
Responder1
Experimente isto:
<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>
Os arquivos aninhados dentro de um diretório serão aplicados apenas nele, para que seu bloco de código seja organizado de forma mais lógica, e acho que usar 'Satisfazer qualquer' permitirá que eles sejam mesclados conforme planejado. Não tenho certeza se é realmente necessário, então tente com e sem a linha de satisfação...
Responder2
Não tenho certeza se a solução <Files xxx>
realmente funciona bem, pois oExigir página de documentoafirma que não se aplica aFiles
Context: directory, .htaccess
Em vez disso, o que o documento do Apache sugere é criar um diretório separado para o arquivo:
Removendo controles em subdiretórios
O exemplo a seguir mostra como usar a diretiva Satisfy para desabilitar controles de acesso em um subdiretório de um diretório protegido. Esta técnica deve ser usada com cautela, pois também desabilitará quaisquer controles de acesso impostos pelo 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>