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