apache - rewritecond - rewriterule flags
mod-rewrite THE_REQUEST y(REQUEST_URI o REQUEST_FILE) dan diferentes nombres de archivos, ¿por qué? (2)
He buscado un poco y no he encontrado una buena explicación de por qué %{REQUEST_URI}
comporta como en su ejemplo. La forma más común de lograr lo que estás buscando parece ser una retrospectiva:
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.+)$ bootstrap.php?requestedURI=$1 [L]
Editar
Según su comentario, parece que REQUEST_URI
y REQUEST_FILENAME
se actualizan y se vuelven a evaluar cuando se desencadena la reescritura.
Estaba experimentando con mod-rewrite. Pensé que lo que quería era simple, pero no obtengo el URI del archivo solicitado a través de REQUEST_URI. Más bien, el nombre que se entrega se transmite.
El manual dice:
LA SOLICITUD
La línea de solicitud HTTP completa enviada por el navegador al servidor (por ejemplo, "GET /index.html HTTP / 1.1"). Esto no incluye ningún encabezado adicional enviado por el navegador. Este valor no se ha descamado (decodificado), a diferencia de la mayoría de las otras variables a continuación.
REQUEST_URI
El recurso solicitado en la línea de solicitud HTTP. (En el ejemplo anterior, esto sería "/index.html").
Sin embargo, los dos dan diferentes nombres de archivo en mis pruebas. Tengo un bootstrap.php a través del cual quería enviar todas las solicitudes. Este es el archivo de prueba:
<?php
echo $_GET[''requestedURI''];
?>
en el archivo .htaccess que tengo:
### REWRITE RULES ###
RewriteEngine on
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule .+ bootstrap.php?requestedURI=%{REQUEST_URI} [L]
Solicitando http://localhost/test.htm
saca: /bootstrap.php
si pongo THE_REQUEST en lugar de REQUEST_URI en el .htaccess obtengo GET /test.htm HTTP / 1.1
Entonces, ¿por qué no conformarse con THE_REQUEST? Bueno, tan pronto como una cadena de consulta existe, las cosas se rompen. Si solicito: http://localhost/test.htm?x=1&y=2
obtengo GET /test.htm?x=1 en el primer ampersand se rompe todo. Creo que debería ser posible reemplazar todos los signos y signos en la cadena de consulta con% 26 para que funcione pero no lo logré hasta ahora ...
Entonces, ¿alguien puede decir por qué REQUEST_URI falla y cómo solucionarlo o cómo volver a escribir los signos y símbolos a% 26 en la cadena de consulta?
Gracias.
EDITAR: El informe anterior se aplica a xampp 1.7.3 en Win 7. Lo intenté en un sistema de producción Linux mientras tanto y allí REQUEST_URI devuelve lo que debería.
No necesita pasar explícitamente la ruta y consulta URI solicitada, ya que puede acceder a ella en PHP a través de $_SERVER[''REQUEST_URI'']
. Por lo tanto, esto debería ser suficiente:
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule .+ bootstrap.php