Enmendaría la respuesta de Grant a "Sí, eso funcionará en su mayoría como se esperaba".
Específicamente, el comportamiento de mod_rewrite
con respecto a las cadenas de consulta existentes puede sorprender.Como ejemplo, tomemos la siguiente regla, que convierte la URL que ha proporcionado:
RewriteRule /contact /index.php?p=contact
Esto volverá a escribir correctamente /contact
-/index.php?p=contact
y el nombre de la página será accesible a través $_GET['p']
. Sin embargo, si utiliza esta técnica con una secuencia de comandos que utiliza parámetros que no sean el nombre de la página, se vuelve un poco más complicado. Esta regla también traduce /contact?person=Joe
a /index.php?p=contact
. ¡El parámetro person=Joe
desaparece por completo! Hay dos formas de lidiar con esto.
La forma más sencilla es utilizar el ("cadena de consulta de datos anexados") bandera [QSA]
en su regla, que situará a la cadena de búsqueda original después los parámetros proporcionados en la regla, la traducción de /contact?person=Joe
a /index.php?p=contact&person=Joe
:
RewriteRule /contact /index.php?p=contact [QSA]
Sin embargo, esto hace que sea posible para su parámetro p=
llegar sobrescribe. Visitando /contact?p=about
conseguirá reescrito para /index.php?p=contact&p=about
, por lo $_GET['p']
volverá "aproximadamente" en su guión, no "contacto". Para resolver esto, utilice la variable QUERY_STRING
lugar:
RewriteRule /contact /index.php?%{QUERY_STRING}&p=contact
Esto garantiza que se $_GET['p']
siempre retorno "contacto" cuando se utiliza esta regla, independientemente de si sus visitantes están metiendo con sus URL. :-)
Ahora en serio, soy yo el único notar aquí que él está tratando de convertir a http://example.com/index.php?p=contact http://example.com/contact, y no http://example.com/contactar con http://example.com/index.php?p=contacto, como todos los que están haciendo aquí? –
No entendí cómo funcionaba, pero las respuestas aquí ayudaron a corregir mi comprensión. – VirtuosiMedia