Qual é o oposto de [F] (ou seja, proibir) na sintaxe do .htaccess do Apache?

1

Eu tenho uma regra aplicada à configuração httpd.conf do meu Apache, que se parece com:

<DirectoryMatch "^/.*/\..*/">
    Order deny,allow    
    Deny from all
</DirectoryMatch>

Ele bloqueia o acesso a diretórios ocultos, como .git, em nossa webroot. No entanto, a aplicação web que estamos usando (Magento) faz uso de um subdiretório .thumbs dentro do diretório de mídia que precisa ser publicamente acessível.

Eu tenho uma regra que funciona no .htaccess que explicitamente proíbe o acesso a diretórios ocultos:

RewriteRule (^\.|/\.) - [F]

Mas parece que não consigo encontrar a versão permite da linha acima.

Contexto: A razão pela qual não estamos modificando o arquivo de configuração httpd.conf do Apache é que esperamos resolver isso com apenas uma implementação baseada em código e passo-a-passo a necessidade de recarregar a configuração do servidor web em cada ciclo de vida meio Ambiente.

    
por sparecycle 12.09.2017 / 18:46

3 respostas

2

...not modifying the Apache httpd.conf configuration file

tl; dr Adicione o seguinte ao arquivo .htaccess no diretório que você deseja permitir, por exemplo. /media/.thumbs/.htaccess :

<Files "*">
    Order deny,allow    
    Allow from all
</Files>

What's the opposite of [F] (i.e. forbid) ...

Você parece estar fazendo a pergunta errada. Você precisa do oposto de Deny (mod_authz_host) - é isso que você precisa sobrescrever. (No entanto, existem outras complicações com a ordem em que as diretivas são processadas, portanto continue lendo ...)

( Aside: A F flag é a maneira de o mod_rewrite enviar uma resposta 403 Forbidden, não há realmente um oposto a , além de evitar o envio a 403 Proibido! Se a requisição já estiver bloqueada com mod_authz_host (ie. Deny ) então você não pode "desfazer" isto com mod_rewrite.)

O oposto de Deny é Allow em mod_authz_host. Por exemplo, no arquivo /media/.thumbs/.htaccess , você pode fazer isso:

Order deny,allow    
Allow from all

No entanto, isso não substituirá o contêiner <DirectoryMatch> na configuração do servidor, porque <DirectoryMatch> contêineres são processados após .htaccess . Se, no entanto, você usou um contêiner (% regex) <Directory> na configuração do servidor, em vez de <DirectoryMatch> , isso teria substituído a configuração do servidor porque <Directory> containers e .htaccess são processados no < em> mesmo tempo com .htaccess sobrescrevendo <Directory> containers.

No entanto, você ainda pode permitir o acesso a todos os arquivos no subdiretório /media/.thumbs agrupando as diretivas Allow acima em um contêiner <Files> (no mesmo arquivo .htaccess ) . Por exemplo:

<Files "*">
    Order deny,allow    
    Allow from all
</Files>

Ao agrupar essas diretivas em um contêiner <Files> , você está alterando a ordem de processamento. Crucialmente, <Files> containers são processados após <DirectoryMatch> containers (apesar de aparecerem no arquivo .htaccess ), então isso agora substitui o contêiner <DirectoryMatch> na configuração do servidor.

De os documentos do Apache 2.2 sobre como as seções são mescladas :

The order of merging is:

  1. <Directory> (except regular expressions) and .htaccess done simultaneously (with .htaccess, if allowed, overriding <Directory>)
  2. <DirectoryMatch> (and <Directory ~>)
  3. <Files> and <FilesMatch> done simultaneously
  4. <Location> and <LocationMatch> done simultaneously
    
por 29.09.2017 / 01:16
0

1º Não use o .htaccess

2º Adicione uma regex "lookahead negativo" antes do padrão real para fazer uma exceção:

<DirectoryMatch ^/(?!\.thumbs).*/\..*/>
    Order deny,allow    
    Deny from all
</DirectoryMatch>
    
por 22.09.2017 / 19:15
0

Você pode tentar isso:

RewriteCond %{REQUEST_FILENAME} !"path to.thumbs sub-directory"
RewriteRule (^\.|/\.) - [F]

Para bloquear o acesso em todas as pastas, exceto na pasta especificada.

    
por 25.09.2017 / 13:06