Reescribir la regla cuando la fuente contenga un '?'

Reescribir la regla cuando la fuente contenga un '?'

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

información relacionada