Negar acesso a todos os arquivos, exceto index.php, mas permitir acesso através de “/” no arquivo htaccess

1

Quando tento limitar o acesso a arquivos a apenas index.php usando algo semelhante à resposta no link abaixo, não consigo acessar o índice do diretório, como "DIRECTORY /" e "DIRECTORY".

Eu quero poder fazer o abaixo e negar todos os arquivos, exceto index.php de um arquivo .htaccess no DIRETÓRIO.

Negando acesso a todos os arquivos, exceto index.html apache

DIRECTORY/index.php?get1=val1  
DIRECTORY/?get1=val1  
DIRECTORY?get1=val1
    
por Damien Golding 23.10.2018 / 03:19

2 respostas

3

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
por 23.10.2018 / 14:43
0

Se o link que você deu não funcionar, você pode fazer algo nos moldes de

RewriteEngine on
RewriteRule ^DIRECTORY /DIRECTORY/index.php?get1=val1 [R=permanent,L]
    
por 23.10.2018 / 03:32