网址如下(有 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]