Coçando minha cabeça com isso. Eu tenho um URL antigo:
http://myserver/blog/archive?openview&type=Category&key=Demo
e um novo URL
http://myserver/blog/categories/Demo
Estou tentando obter uma regra de reescrita para isso. Eu pensei que seria:
^/blog/archive\?openview&type=Category&key=(.*) /blog/categories/$1.html [NC,R=301,L]
Mas isso não faz nada. Tentei o URL e a regra (substitua ? por /):
http://myserver/blog/archive/openview&type=Category&key=Demo
^/blog/archive/openview&type=Category&key=(.*) /blog/categories/$1.html [NC,R=301,L]
E isso funciona como esperado. Então, estou um pouco confuso sobre como lidar com o? para correspondência no URL antigo. Todas as amostras que encontrei descrevem o caso oposto. Enviando o URL "bonito" para o feio. No meu caso, o URL "feio" é o que as pessoas marcaram no passado e quero ter certeza de que eles acessarão os novos dados corretamente
Responder1
Pensando um pouco (e lendoa documentação) mais tarde:
As correspondências mod_rewrite usam apenas a parte de localização do URL. O "?" marca o final do local e o início dos parâmetros (também conhecido como QueryString). Depois que percebi isso, foi apenasum Google de distância.
Então, para transformar corretamente você precisa de uma condição de reescrita:
RewriteCond %{QUERY_STRING} ^openview&type=Category&key=(.*) [NC]
RewriteRule ^/blog/archive$ /blog/categories/%1.html [NC,R=301,L]
Funciona como um encanto