Evitar redirecionar para REQUEST_URI específico

1

Eu adicionei um diretório à pasta pública do meu site e coloquei o seguinte arquivo .htaccess dentro dele:

AuthName "Restricted Area"
AuthType Basic
AuthUserFile /path/to/.htpasswd
AuthGroupFile /
Require valid-user

O arquivo .htpasswd existe e tem conteúdo válido.

Dentro da pasta pública do site, há um arquivo .htaccess com a seguinte regra de reconfiguração:

RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . index.php

Com essa configuração, minha pasta /protected não está protegida.

  • Se eu deixar a regra de reescrita intocada, o Apache não parece ler meu arquivo /protected/.htaccess , e minha pasta /protected não está protegida.
  • Se eu comentar a reescrita, a tentativa de acesso ao meu diretório /protected resultará em um prompt de senha, como esperado.

Eu modifiquei a regra de reescrita .htaccess da raiz com o que eu deveria evitar que mod_rewrite tente reescrever solicitações para a minha pasta /protected conforme abaixo:

RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} !^/protected
RewriteRule . index.php

Mas isso parece não ter efeito:

  • A solicitação parece ser processada por /index.php em vez de solicitar detalhes de autenticação conforme o esperado
  • A pasta /protected não está protegida
  • O restante do site funciona normalmente

Também há um arquivo index.php dentro da minha pasta protegida ( /protected/index.php ), com o seguinte conteúdo:

die('protected');

Alguém pode ver um problema com essa abordagem ou com minhas modificações na regra de regra de reescrita .htaccess ?

    
por Michael Robinson 30.07.2012 / 02:30

1 resposta

1

Facepalm !

As minhas condições de reescrita do funcionam como esperado, o problema estava no meu ficheiro /protected/.htaccess :

For basic authentication, the server writes a "401 Unauthorized" header and then looks for an error document based on a pre-defined path. Most of the time, the error document won't exist in the directory that you want to protect, so the request gets handled by the rewrite engine which throws a 404 error.

A solução foi adicionar o seguinte aos arquivos /protected/.htaccess :

ErrorDocument 401 "Unauthorized Access"
RewriteEngine off

... Authorisation lines

De Conflito entre a reconfiguração de URL do Apache e Autenticação Básica .

    
por 30.07.2012 / 04:49