rewriterule rewritecond rewritebase mod_rewrite htaccess examples ejemplos apache .htaccess mod-rewrite

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