
O %{REQUEST_FILENAME}
contém uma string como esta:
/web/webroot/index.php
Vejo que muitas pessoas recomendam testar se um arquivo existe e tem uma extensão .php como esta:
RewriteCond %{REQUEST_FILENAME}.php -f
.php
O depois não é %{REQUEST_FILENAME}
redundante? A variável já deve conter o .php
, certo?
Parece que adicionar .php
depois %{REQUEST_FILENAME}
faria com que a verificação TestString adicionasse um .php extra, assim:
/web/webroot/index.php.php
Estou sentindo falta de algo simples, tenho certeza disso, mas simplesmente não sei o que é.
O contexto é este:
RewriteCond %{THE_REQUEST} ^.*?\.php [NC]
RewriteRule ^ - [R=404,NE,L]
RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule ^ %{REQUEST_FILENAME}.php [L]
Responder1
.php
O depois não é%{REQUEST_FILENAME}
redundante? A variável já deve conter o.php
, certo?
Bem, sim e não, depende do que você está tentando fazer.
RewriteCond %{REQUEST_FILENAME}.php -f RewriteRule ^ %{REQUEST_FILENAME}.php [L]
Esta regra permite solicitar URLs sem extensão. por exemplo. /index
ou /foo
e isso reescreve internamente a solicitação para /index.php
e /foo.php
respectivamente.
Neste caso, REQUEST_FILENAME
é uma string no formato /web/webroot/index
. Então, são testes que /web/webroot/index.php
existem antes de reescrever o mesmo. Se você solicitasse /index.php
então odoençafalha e nenhuma reescrita ocorre (o que é correto).
No entanto, esta regra não é estritamente correta e pode causar um loop de reescrita sob certas condições. Veja a seguinte pergunta relacionada: