mod_rewrite pode fazer isso.
RewriteRule ^File[AB]$ - [R=404]
Eu tenho alguns arquivos privados em uma pasta pública e quero bloquear o acesso a eles. Por exemplo, digamos que eu tenha a seguinte árvore de arquivos:
Eu quero bloquear o acesso ao FileB e ao FileA no diretório atual e permitir o acesso ao FileA no diretório DictA. A primeira coisa que me veio à mente foi usar a diretiva FilesMatch da seguinte forma:
<FilesMatch "^(?:FileA)|(?:FileB)$">
Deny from all
</FilesMatch>
O problema aqui é que o FileA dentro do DictA também será bloqueado, o que não é o que eu queria. Eu poderia substituir isso adicionando outro arquivo .htaccess ao DictA, mas gostaria de saber se existe uma solução que não envolverá isso.
P.S: não consigo mover os arquivos particulares para uma pasta separada.
mod_rewrite pode fazer isso.
RewriteRule ^File[AB]$ - [R=404]
Você tem vários métodos:
Um seria escrever uma expressão regular contendo um /
como caractere de parada.
Outro, permitindo usar qualquer opção para o Apache: você define as opções desejadas para o diretório atual, então você define as opções opostas para os subdiretórios.
<Directory /var/www/mydir/>
Options -Indexes
</Directory>
<Directory /var/www/mydir/*>
Options +Indexes
</Directory>
Portanto, para o seu exemplo, use apenas deny
no diretório atual e allow
para os subdiretórios:
<Directory /var/www/mydir/>
<FilesMatch "^(?:FileA)|(?:FileB)$">
Deny from all
</FilesMatch>
</Directory>
<Directory /var/www/mydir/*>
<FilesMatch "^(?:FileA)|(?:FileB)$">
Allow from all
</FilesMatch>
</Directory>
Tags apache-2.2