Reescreva a regra quando a fonte contiver um '?' [duplicado]

1

Coçando minha cabeça nisso. 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. Eu tentei o URL e a regra (substitua o? 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 com um pouco de dinheiro para lidar com isso? 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, a URL "feia" é o que as pessoas no passado tinham marcado e eu quero ter certeza de que elas acessam os novos dados corretamente

    
por stwissel 25.12.2013 / 12:35

1 resposta

2

Pensando um pouco (e lendo a documentação ) mais tarde:

As correspondências mod_rewrite usam apenas a parte de localização da URL. O "?" marca o fim da localização e o começo dos parâmetros (a.k.a QueryString). Depois que percebi isso, era apenas um Google longe .

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 charme

    
por 25.12.2013 / 13:24