如何将带有字符串查询的 URL 重定向到不带有字符串查询的相同 URL?

如何将带有字符串查询的 URL 重定向到不带有字符串查询的相同 URL?

网址如下(有 2 个网站,一个带有 www,另一个不带有 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 重定向。

答案1

虽然您发布的两条规则都不是严格正确的,但它们都应该执行所需的重定向。如果您的.htaccess文件中还有其他指令,那么最可能的原因是它们的顺序错误,并且存在冲突。

这些重定向需要放在文件顶部附近.htaccess在任何现有的 mod_rewrite 指令之前。(尽管您可能希望将其与您的 HTTPS / 裸域重定向结合起来?)

如果您的文件中已经存在该内容,那么您就不需要<IfModule>包装器,也不需要指令。RewriteEngine On.htaccess

_gl=当请求包含以下列内容开头的查询字符串时,删除查询字符串条件模式应为^_gl=。尾随*重复前面的内容=_gl=匹配查询字符串中的任意位置的字符串,而不仅仅是开头。

例如:

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

如果你使用的是 Apache 2.4,那么你可以使用QSD标志(查询字符串丢弃)标志,而不是?代换字符串。即。RewriteRule ^ %{REQUEST_URI} [QSD,R,L]

相关内容