Pregunta

Estoy buscando reescribir las URL con múltiples subcadenas. Una subcadena se solicita como un subdirectorio, mientras que las demás se solicitan como parámetros de cadena de consulta normales.

Por ejemplo, me gustaría reescribir las URL de

http://www.mysite.com/mark/friends?page=2

a

http://www.mysite.com/friends.php?user=mark&page=2

Puedo lograr esto con la excepción del carácter de signo de interrogación. Aquí está mi regla de reescritura:

...
RewriteEngine On
RewriteBase /
RewriteRule ^([A-Za-z0-9-_]+)/friends[?]?([^/\.]+)?$ friends.php?user=$1&$2 [L]

Si cambio el signo de interrogación a cualquier otro carácter, funciona muy bien. Parece que el problema es que el '?' el carácter se interpreta incorrectamente como el inicio de una nueva cadena de consulta.

Necesito pasar cualquier parámetro que aparezca después de / user / friends tal como está. ¿Cómo logro esto?

¿Fue útil?

Solución

Debería usar la marca [QSA] en lugar de intentar volver a escribir la cadena de consulta. [QSA] pasa la cadena de consulta a la URL reescrita.

Por lo tanto, su regla debe verse como:

...
RewriteEngine On
RewriteBase /
RewriteRule ^([A-Za-z0-9-_]+)/friends/? friends.php?user=$1 [QSA,L]

Su caso es muy similar a el ejemplo dado para usar la marca QSA en el libro de recetas mod_rewrite .

Otros consejos

La consulta no forma parte de la ruta URL y, por lo tanto, no puede ser procesado con la directiva RewriteRule . Esto solo se puede hacer con RewriteCond directiva (ver % {QUERY_STRING} ).

Pero como Chad Birch ya lo dijo es suficiente para establecer el QSA flag para obtener automáticamente la consulta original solicitada adjunta a la nueva URL.

Además de usar el indicador de reescritura QSA, también puede usar la variable de entorno QUERY_STRING como se muestra a continuación:

RewriteEngine On
RewriteBase /
RewriteRule ^([A-Za-z0-9-_]+)/friends$ /friends.php?user=$1&%{QUERY_STRING}

Y la URL en cuestión

http://www.example.com/mark/friends?page=2

se volverá a escribir en (según lo especificado):

http://www.example.com/friends.php?user=mark&page=2
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top