¿Cómo redirigir la URL con una consulta de cadena a la misma URL sin una consulta de cadena?

Oct 13 2019

La (s) URL (es) como a continuación (hay 2 sitios web, uno con www y otro sin él)

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

debería redirigir a

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

Solo el _gl = parece ser constante.

Yo he tratado:

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

Y

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

Y otras reglas. Pero nada parece funcionar.

Espero que la solución no estropee la redirección de dominio simple y la redirección https.

Respuestas

DocRoot Oct 14 2019 at 01:23

Si bien ninguna de las reglas que ha publicado es estrictamente correcta, ambas deben realizar el redireccionamiento requerido. Si tiene otras directivas en su .htaccessarchivo, la causa más probable es que estén en el orden incorrecto y tenga un conflicto.

Estos redireccionamientos deberán ir cerca de la parte superior del .htaccessarchivo, antes que cualquier directiva mod_rewrite existente . (¿Aunque es posible que desee combinarlo con sus redireccionamientos HTTPS / dominio simple?)

No necesita el <IfModule>contenedor y no necesita la RewriteEngine Ondirectiva, si esto ya existe en su .htaccessarchivo.

Para eliminar la cadena de consulta cuando una solicitud contiene una cadena de consulta que comienza _gl=, CondPattern debería leer ^_gl=. Un final *repite lo anterior =y hace _gl=coincidir esa cadena en cualquier lugar de la cadena de consulta, no solo al principio.

Por ejemplo:

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

Si está en Apache 2.4, puede usar la QSDbandera (Descartar cadena de consulta) en lugar de agregar una ?a la cadena de sustitución . es decir.RewriteRule ^ %{REQUEST_URI} [QSD,R,L]