Dize sorgusu olan URL'yi dize sorgusu olmadan aynı URL'ye nasıl yönlendirebilirim?
Aşağıdaki gibi URL'ler ( biri www olan ve olmayan 2 web sitesi var)
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
yönlendirilmeli
https://example1.com/any-path-here/
https://www.example2.com/hello-how-are-you-today/
Yalnızca _gl = sabit görünüyor.
Denedim:
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{QUERY_STRING} _gl=
RewriteRule ^ %{REQUEST_URI}? [L,R]
</IfModule>
Ve
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{QUERY_STRING} ^_gl=*
RewriteRule ^ %{REQUEST_URI}? [L,R]
</IfModule>
Ve diğer kurallar. Ama hiçbir şey işe yaramıyor gibi görünüyor.
Umarım çözüm, açık alan adı yönlendirmesini ve https yönlendirmesini bozmaz.
Yanıtlar
Gönderdiğiniz kuralların hiçbiri kesinlikle doğru olmasa da, her ikisi de gerekli yönlendirmeyi gerçekleştirmelidir. .htaccessDosyanızda başka direktifler varsa, o zaman en olası nedeni bunların yanlış sırada olması ve bir çatışmanız olmasıdır.
Bu yeniden yönlendirmelerin, mevcut mod_rewrite yönergelerinden önce.htaccess dosyanın üst kısmına yakın olması gerekir . (Yine de HTTPS / açık alan yönlendirmelerinizle birleştirmek isteyebilirsiniz?)
Buna gerek yok <IfModule>sarıcı ve ihtiyacınız yok RewriteEngine Onbu zaten mevcutsa, yönerge .htaccessdosyası.
Bir istek başlayan bir sorgu dizesi içerdiğinde sorgu dizesi kaldırmak için _gl=daha sonra CondPattern okumalısınız ^_gl=. Sonda *, öncekini tekrarlar =ve _gl=bu dizeyi yalnızca başlangıçta değil, sorgu dizesinin herhangi bir yerinde eşleştirir.
Örneğin:
RewriteCond %{QUERY_STRING} ^_gl=
RewriteRule ^ %{REQUEST_URI}? [R,L]
Apache QSD2.4'teyseniz ?, ikame dizesine bir eklemek yerine bayrak (Query String Discard) bayrağını kullanabilirsiniz . yani.RewriteRule ^ %{REQUEST_URI} [QSD,R,L]