Dot-Htaccess

如何將帶有字元串查詢的 URL 重定向到沒有字元串查詢的同一個 URL?

  • October 13, 2019

如下所示的 URL(有 2 個網站,一個帶有 www,另一個沒有)

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

應該重定向到

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

只有**_gl=**似乎是不變的。

我試過了:

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

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

和其他規則。但似乎沒有任何效果。

我希望解決方案不會搞亂裸域重定向和 https 重定向。

雖然您發布的規則都不是嚴格正確的,但它們都應該執行所需的重定向。如果您的.htaccess文件中有其他指令,那麼最可能的原因是它們的順序錯誤並且您有衝突。

這些重定向需要靠近.htaccess文件頂部,在任何現有的 mod_rewrite 指令之前。(儘管您可能希望將它與您的 HTTPS / 裸域重定向結合起來?)

您不需要<IfModule>包裝器,也不需要RewriteEngine On指令,如果它已經存在於您的.htaccess文件中。

要在請求包含開始的查詢字元串時刪除查詢字元串,_gl=CondPattern應讀取^_gl=. 尾隨*重複前面的內容=_gl=匹配查詢字元串中任何位置的該字元串,而不僅僅是在開頭。

例如:

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

如果您使用的是 Apache 2.4,那麼您可以使用QSD標誌(查詢字元串丟棄)標誌,而不是將 a 附加?替換字元串。IE。RewriteRule ^ %{REQUEST_URI} [QSD,R,L]

引用自:https://serverfault.com/questions/987802