Para permitir que o mod_dir faça a subrequisa interna para o DirectoryIndex
ao solicitar o diretório nu, você só precisa fazer com que o arquivo seja opcional, de modo que ele também corresponda a um nome de arquivo essencialmente vazio.
Por exemplo:
Order allow,deny
Deny from all
<FilesMatch ^(index\.php)?$>
Allow from all
</FilesMatch>
Isso, então, permite que ambos
-
DIRECTORY/index.php?get1=val1
- e
DIRECTORY/?get1=val1
Em que DIRECTORY
é qualquer diretório (incluindo a raiz do documento).
No entanto, isso não permite DIRECTORY?get1=val1
(nenhuma barra após o nome do diretório). Estritamente falando, este é um URL inválido no Apache. Normalmente, o mod_dir "conserta" o URL emitindo um redirecionamento 301 para anexar a barra final. ie. DIRECTORY?get1=val1
é redirecionado externamente para DIRECTORY/?get1=val1
. Infelizmente, as diretivas de autorização acima bloqueiam o mod_dir de fazer esse redirecionamento.
Se você quisesse especificamente permitir DIRECTORY?get1=val1
(sem barra), então você poderia fazer tudo com mod_rewrite ao invés de mod_authz_host (Apache 2.2). Por exemplo, substitua o acima pelo seguinte:
RewriteEngine On
RewriteRule ^DIRECTORY/(?!index\.php|$) - [F]
Isso bloqueia o acesso ao conteúdo do específico DIRECTORY
, mas permite que /DIRECTORY/index.php
e /DIRECTORY/
sejam acessados. Isso não faz nada de especial com uma solicitação para /DIRECTORY
(sem barra no final), mas é executado com atraso na solicitação de mod_dir para entrar primeiro e emitir o redirecionamento 301 (mencionado acima).
(?!index\.php|$)
é um lookahead negativo - que é bem-sucedido quando index.php
ou $
(fim da URL) não corresponde a . ie. Ele combina tudo, exceto index.php
e nada .
Referência:
- Permitir que o diretório fique acessível: link