
Contiene %{REQUEST_FILENAME}
una cadena como esta:
/web/webroot/index.php
Veo que mucha gente recomienda probar si existe un archivo y tiene una extensión .php como esta:
RewriteCond %{REQUEST_FILENAME}.php -f
¿No es redundante el .php
después %{REQUEST_FILENAME}
? La variable ya debería contener el .php
, ¿verdad?
Parece que agregar .php
después %{REQUEST_FILENAME}
haría que la verificación TestString agregue un .php adicional, como este:
/web/webroot/index.php.php
Me falta algo simple, estoy seguro, pero no sé qué es.
El contexto es este:
RewriteCond %{THE_REQUEST} ^.*?\.php [NC]
RewriteRule ^ - [R=404,NE,L]
RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule ^ %{REQUEST_FILENAME}.php [L]
Respuesta1
¿No es redundante el
.php
después%{REQUEST_FILENAME}
? La variable ya debería contener el.php
, ¿verdad?
Bueno, sí y no, depende de lo que intentes hacer.
RewriteCond %{REQUEST_FILENAME}.php -f RewriteRule ^ %{REQUEST_FILENAME}.php [L]
Esta regla le permite solicitar URL sin extensión. p.ej. /index
o /foo
y esto reescribe internamente la solicitud a /index.php
y /foo.php
respectivamente.
En este caso, REQUEST_FILENAME
es una cadena con el formato /web/webroot/index
. Entonces, lo que existe es una prueba /web/webroot/index.php
antes de reescribir lo mismo. Si tuvieras que solicitarlo, /index.php
entonces elcondiciónfalla y no se produce ninguna reescritura (lo cual es correcto).
Sin embargo, esta regla no es estrictamente correcta y podría causar un bucle de reescritura bajo ciertas condiciones. Consulte la siguiente pregunta relacionada: