Como redirecionar o URL com consulta de string para o mesmo URL sem consulta de string?

Oct 13 2019

O (s) URL (s) como abaixo (há 2 sites, um com www e outro sem)

https://example1.com/any-path-here/?_gl=1*um0ntk*_ga*YW1wLUVyYS1QbHgwcFp1SEJBYVlGSlNYdWNQUWIxNGVxY2VhakRDNDUtYmJUZWZPV1M2WEdWN2s2dXVRNzNZWGNTdkk

https://www.example2.com/hello-how-are-you-today/?_gl=1*1lcwex2*_ga*YW1wLXBtWXdrdWNEcTRjTVcwWjMzTzJwNEdJeU5vTmo5UVF0RmFhTEdpbkdMdjgyLXRNQXJaM21oRGpUX2ppSnB3dGs

deve redirecionar para

https://example1.com/any-path-here/
https://www.example2.com/hello-how-are-you-today/

Apenas o _gl = parece ser constante.

Eu tentei:

<IfModule mod_rewrite.c>
RewriteEngine On  
RewriteCond %{QUERY_STRING} _gl=    
RewriteRule ^ %{REQUEST_URI}? [L,R]
</IfModule>

E

<IfModule mod_rewrite.c>
RewriteEngine On  
RewriteCond %{QUERY_STRING} ^_gl=*    
RewriteRule ^ %{REQUEST_URI}? [L,R]
</IfModule>

E outras regras. Mas nada parece funcionar.

Espero que a solução não atrapalhe o redirecionamento de domínio sem www e o redirecionamento de https.

Respostas

DocRoot Oct 14 2019 at 01:23

Embora nenhuma das regras que você postou seja estritamente correta, ambas devem executar o redirecionamento necessário. Se você tiver outras diretivas em seu .htaccessarquivo, a causa mais provável é que elas estão na ordem errada e você tem um conflito.

Esses redirecionamentos precisarão chegar perto do início do .htaccessarquivo, antes de qualquer diretiva mod_rewrite existente . (Embora você possa querer combiná-lo com seus redirecionamentos de domínio HTTPS / sem www?)

Você não precisa do <IfModule>wrapper e não precisa da RewriteEngine Ondiretiva, se ela já existir no seu .htaccessarquivo.

Para remover a string de consulta quando uma solicitação contém uma string de consulta que inicia _gl=, o CondPattern deve ler ^_gl=. Um final *repete o precedente =e _gl=corresponde a essa string em qualquer lugar da string de consulta, não apenas no início.

Por exemplo:

RewriteCond %{QUERY_STRING} ^_gl=    
RewriteRule ^ %{REQUEST_URI}? [R,L]

Se você estiver no Apache 2.4, poderá usar o QSDsinalizador (Query String Discard) em vez de anexar um ?à string de substituição . ie.RewriteRule ^ %{REQUEST_URI} [QSD,R,L]