Como bloquear o acesso a arquivos no diretório atual com .htaccess

1

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:

  • DictA
    • FileA
  • FileA
  • FileB
  • FileC

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.

    
por kfir 01.04.2012 / 22:38

2 respostas

3

mod_rewrite pode fazer isso.

RewriteRule ^File[AB]$ - [R=404]
    
por 01.04.2012 / 23:27
3

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>
    
por 01.04.2012 / 23:18

Tags