2011-09-03 17 views
6

¿Alguien tiene alguna idea de si es posible poner variables adicionales en una URL que está utilizando mod_rewrite para básicamente cortar en variables.Cómo agregar variables de URL adicionales a una URL ya reescrita con mod_rewrite

Por ejemplo, si tengo la URL:

website.com/post/53/post-title/ 

y estoy usando mod_rewrite para convertirlo en:

website.com/post.php?postid=53 

está ahí y elegante manera de poner variables adicionales en el "pre -rewritten "URL y guardarlos para mi script post.php?

IE, lo que si creo un enlace como el siguiente:

website.com/post/53/post-title/?anothervar=6 

Hasta ahora parece que mi código mod_rewrite se acaba de tirar la variable adicional y enviar la URL de la secuencia post.php así:

website.com/post.php?postid=53 

yo sé que puedo usar $_SERVER['REQUEST_URI'] para obtener la URL original en mi script php (También conocido como website.com/post/53/post-title/?anothervar=6) antes de que sea reescrito por mod_rewrite y luego simplemente corte la cadena para conseguir ese añadido el variable, pero me solo quería saber si había una solución más elegante que solo utilizara mod_rewrite.

Respuesta

13

también puede usar% {QUERY_STRING} para pasar la cadena de consulta original a la nueva url. o úselo como lo desee, p.

RewriteRule /pages/(.*) /page.php?page=$1&%{QUERY_STRING} [R] 
+0

Gracias, lo resolvió. ¿Qué es eso [R] al final de su regla de reescritura? No tengo eso al final de cualquiera de mis líneas de reglas de reescritura. – billmalarky

+0

gracias, estoy agregando este comentario porque olvidé notificarte en el de arriba que decía: ¿Qué es eso [R] al final de tu regla de reescritura? No tengo eso al final de cualquiera de mis líneas de reglas de reescritura. – billmalarky

+0

La mejor respuesta aquí. Gracias por esto – Joshua

11

http://httpd.apache.org/docs/current/mod/mod_rewrite.html#rewriterule

"qsappend | QSA"

uso, QSA para hacer mod_rewrite adecuadamente "fusionar" argumentos adicionales al reescribir.

RewriteRule /pages/(.+) /page.php?page=$1 [QSA] 

Eso agregará "página = $ 1" a cualquier solicitud hecha por el usuario.

PS. Aunque tenga cuidado, porque mod_rewrite felizmente sobrescribirá "página" si el usuario lo especifica. No hay forma de evitarlo que yo sepa.

+0

[QSA] lo resolvió para mí. Tengo una página (example.com/page) que se traduce al español si visita el enlace en español (example.com/spanish/pagina) que se reescribe en example.com/page?language=spanish. Intentaba agregar una variable GET adicional a/español/pagina que debía enviarse a través de ajax y seguía recibiendo la página web HTML (las llamadas ajax para la misma página pero solo ejecuta una secuencia de comandos php para enviar datos json en lugar de generar el contenido html). Cualquiera que haga algo como esto debería tener cuidado con el uso de QSA ahora – OzzyTheGiant

Cuestiones relacionadas