mod_rewrite! -f e! -d ignorado para extensões .php

3

Eu tenho um arquivo .htaccess em um servidor Apache 2:

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>

As regras funcionam como esperado com qualquer solicitação de um arquivo ou diretório inexistente sendo entregue ao programa index.php para processamento.

A regra também ignora o redirecionamento se um arquivo que está sendo solicitado existir, como qualquer um dos arquivos .txt ou .js no servidor.

No entanto, qualquer arquivo terminado com .php NÃO é processado corretamente. Os arquivos existem, mas as regras! -F e! -D são ignoradas. Basta alterar a extensão para .phpt e solicitar o mesmo arquivo (com "t" adicionado ao final) para exibir o conteúdo do arquivo.

Quaisquer pistas de porque apenas arquivos .php pulariam as regras! -f e! -d?

    
por Lance Cleveland 08.07.2011 / 19:46

1 resposta

1

O mod_rewrite funciona mais previsível com um par: Regra Cond + Sua linha:

RewriteRule ^index\.php$ - [L]

Já corresponde à linha seguinte porque index.php é um arquivo.

Tente:

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule .* /index.php [L]
</IfModule>

Eu acho que sim. vai combinar com apenas um personagem e eu mudei. para. *

    
por 08.07.2011 / 22:02