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
O .php
depois não é %{REQUEST_FILENAME}
redundante? A variável já deve conter o .php
, certo?
Parece que adicionar .php
depois %{REQUEST_FILENAME}
faria a verificação de TestString adicionar um .php extra, assim:
/web/webroot/index.php.php
Estou sentindo falta de algo simples, tenho certeza, mas 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]
Bem, sim e não, depende do que você está tentando fazer.
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, é o teste que/web/webroot/index.php
existe antes de reescrever para o mesmo. Se você solicitar/index.php
, a condição falha e não ocorre reescrita (o que está correto).No entanto, essa regra não é estritamente correta e pode causar um loop de reescrita sob certas condições. Veja a seguinte pergunta relacionada: