Come reindirizzare l'URL con query di stringa allo stesso URL senza query di stringa?

Oct 13 2019

Gli URL come di seguito (ci sono 2 siti web, uno con www e l'altro senza)

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

dovrebbe reindirizzare a

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

Solo _gl = sembra essere costante.

Ho provato:

<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 altre regole. Ma niente sembra funzionare.

Spero che la soluzione non rovini il reindirizzamento del dominio nudo e il reindirizzamento https.

Risposte

DocRoot Oct 14 2019 at 01:23

Sebbene nessuna delle regole che hai pubblicato sia rigorosamente corretta, entrambe dovrebbero eseguire il reindirizzamento richiesto. Se nel .htaccessfile sono presenti altre direttive, la causa più probabile è che si trovano nell'ordine sbagliato e si verifica un conflitto.

Questi reindirizzamenti dovranno essere posizionati all'inizio del .htaccessfile, prima di qualsiasi direttiva mod_rewrite esistente . (Anche se potresti volerlo combinare con i tuoi reindirizzamenti HTTPS / dominio nudo?)

Non hai bisogno del <IfModule>wrapper e non hai bisogno della RewriteEngine Ondirettiva, se questa esiste già nel tuo .htaccessfile.

Per rimuovere la stringa di query quando una richiesta contiene una stringa di query che inizia _gl=poi il CondPattern dovrebbe leggere ^_gl=. Un finale *ripete il precedente =e _gl=corrisponde a quella stringa ovunque nella stringa di query, non solo all'inizio.

Per esempio:

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

Se sei su Apache 2.4, puoi utilizzare il QSDflag (Query String Discard) invece di aggiungere un ?alla stringa di sostituzione . cioè.RewriteRule ^ %{REQUEST_URI} [QSD,R,L]