Estou tentando gerar um redirecionamento externo que envolve algumas tarefas específicas.
- Se um valor de string de consulta específico for encontrado no URL, redirecione.
- Se redirecionado, substitua um dos nomes de parâmetro da string de consulta, mas não seu valor.
- Se # 1 for falso, ignore a reescrita e prossiga
Exemplo: eu tenho o url http://foobar.com/?a=123&b=456&c=blah
Primeiro, se o parâmetro c = blah
, redirecionar para http://barfoo.com/
Em segundo lugar, substitua a
com x
parâmetro para que o URL final seja http://barfoo.com/?x=123&b=456&c=blah
Abaixo está o meu melhor palpite até agora depois de pesquisar sobre http://mod-rewrite-cheatsheet.com/ e Recursos ocultos de mod_rewrite
RewriteEngine on
RewriteCond %{HTTP_HOST} ^www.foobar.com$ [NC]
RewriteCond %{QUERY_STRING} ^a=(.*)&b=(.*)&c=blah$ [NC]
RewriteRule ^(.*)$ http://barfoo.com/?x=%1&b=%2&c=blah [NC,L,QSA,R=301]
No entanto, o URL está anexando a string de consulta, não substituindo.
Eu sou redirecionado para http://barfoo.com/?x=123&b=456&c=blah&a=123&b=456&c=blah
Respostas:
0 para resposta № 1cheira a testa
Removendo QSA
das bandeiras resolveu o problema. QSA
significa "anexar a string de consulta existente à regra de reescrita atual". Ele ignora quaisquer novos parâmetros de string de consulta que você esteja adicionando.
Achei que fosse necessário ter parâmetros de string de consulta para a própria regra de reescrita.
RewriteRule ^(.*)$ http://barfoo.com/?x=%1&b=%2&c=blah [NC,L,R=301]