Me rasco la cabeza con esto. Tengo una URL antigua:
http://myserver/blog/archive?openview&type=Category&key=Demo
y una nueva URL
http://myserver/blog/categories/Demo
Estoy intentando conseguir una regla de reescritura para esto. Pensé que sería:
^/blog/archive\?openview&type=Category&key=(.*) /blog/categories/$1.html [NC,R=301,L]
Pero eso no hace nada. Probé la URL y la regla (reemplace? con /):
http://myserver/blog/archive/openview&type=Category&key=Demo
^/blog/archive/openview&type=Category&key=(.*) /blog/categories/$1.html [NC,R=301,L]
Y eso funciona como se esperaba. ¿Así que estoy un poco estupefacto sobre cómo manejar el? para hacer coincidir en la URL anterior. Todas las muestras que encontré describen el caso contrario. Enviando la URL "bonita" a la fea. En mi caso, la URL "fea" es la que la gente había marcado como favorita en el pasado y quiero asegurarme de que accedan a los nuevos datos correctamente.
Respuesta1
Un poco de reflexión (y lectura)la documentación) más tarde:
Las coincidencias mod_rewrite utilizan únicamente la parte de ubicación de la URL. El "?" marca el final de la ubicación y el comienzo de los parámetros (también conocido como QueryString). Una vez que me di cuenta de eso, fue simplementea Google de distancia.
Entonces, para transformar correctamente necesitas una condición de reescritura:
RewriteCond %{QUERY_STRING} ^openview&type=Category&key=(.*) [NC]
RewriteRule ^/blog/archive$ /blog/categories/%1.html [NC,R=301,L]
Funciona de maravilla