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.mod-rewrite THE_REQUEST y (REQUEST_URI o REQUEST_FILE) dan diferentes nombres de archivo, ¿por qué?
El manual dice:
THE_REQUEST
La solicitud línea completa HTTP 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 de no se ha escapado (decodificado), a diferencia de la mayoría de las otras variables a continuación.
REQUEST_URI
el recurso solicitado en la línea de petición 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
pone a cabo: /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 el primer ampersand rompe las cosas. Creo que debería ser posible reemplazar todos los signos & en la cadena de consulta con% 26 para que funcione, pero no lo logré hasta ahora ...
¿Alguien puede decir por qué REQUEST_URI falla y cómo solucionarlo o cómo reescribe los signos y signos 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.
Gracias, ese es un buen punto. Estaba complicando las cosas, parece. Todavía es gracioso que los dos servidores (win/linux - si eso tiene algo que ver con eso) se comportarían de manera diferente en REQUEST_URI en el .htaccess –
@CO: * REQUEST \ _URI * en mod_rewrite no siempre es el URI solicitado originalmente pero puede también será una versión ya reescrita, como en su caso, donde el ['L' flag] (http://httpd.apache.org/docs/current/rewrite/flags.html#flag_l) causa un redireccionamiento interno. – Gumbo