/ / Mod Rewrite anexando parâmetros de string de consulta, não substituindo - .htaccess, mod-rewrite, redirect, helicontech

Mod Rewrite Anexando Parâmetros da Cadeia de Consulta, Não Substituindo - .htaccess, mod-rewrite, redirect, helicontech

Estou tentando gerar um redirecionamento externo que envolve algumas tarefas específicas.

  1. Se um valor de string de consulta específico for encontrado no URL, redirecione.
  2. Se redirecionado, substitua um dos nomes de parâmetro da string de consulta, mas não seu valor.
  3. 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 № 1

cheira 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]