Bagaimana cara mengarahkan URL dengan kueri string ke URL yang sama tanpa kueri string?

Oct 13 2019

URL seperti di bawah ini (ada 2 situs web, satu dengan www dan lainnya tanpa itu)

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

harus dialihkan ke

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

Hanya _gl = yang tampaknya konstan.

Saya telah mencoba:

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

Dan

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

Dan aturan lainnya. Tapi sepertinya tidak ada yang berhasil.

Saya harap solusinya tidak akan mengacaukan pengalihan domain polos dan pengalihan https.

Jawaban

DocRoot Oct 14 2019 at 01:23

Meskipun tidak ada aturan yang Anda posting benar, keduanya harus melakukan pengalihan yang diperlukan. Jika Anda memiliki arahan lain dalam .htaccessfile Anda , kemungkinan besar penyebabnya adalah urutannya salah dan Anda mengalami konflik.

Pengalihan ini harus berada di dekat bagian atas .htaccessfile, sebelum perintah mod_rewrite apa pun yang ada . (Meskipun Anda mungkin ingin menggabungkannya dengan pengalihan HTTPS / domain polos?)

Anda tidak memerlukan <IfModule>pembungkusnya dan Anda tidak memerlukan RewriteEngine Onperintah tersebut, jika ini sudah ada di .htaccessfile Anda .

Untuk menghapus string kueri saat permintaan berisi string kueri yang dimulai _gl=maka CondPattern harus membaca ^_gl=. Sebuah trailing *mengulangi yang sebelumnya =dan _gl=cocok dengan string itu di manapun dalam string kueri, tidak hanya di awal.

Sebagai contoh:

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

Jika Anda menggunakan Apache 2.4, Anda dapat menggunakan QSDflag (Query String Discard) daripada menambahkan a ?ke string substitusi . yaitu.RewriteRule ^ %{REQUEST_URI} [QSD,R,L]