如何通过.htaccess移除URL末尾的?mobile=1查询字符串
原有规则失效原因
RewriteRule默认仅匹配URL的路径部分,不会识别?之后的查询字符串内容,因此你写的匹配?mobile=1的规则完全无法命中请求,自然不会生效。
正确实现方案
方案1:直接丢弃所有查询字符串(完全匹配你的需求)
如果只要出现mobile=1参数就直接移除整个查询字符串,用以下规则即可:
RewriteEngine On # 精确匹配查询字符串中的mobile=1参数 RewriteCond %{QUERY_STRING} (^|&)mobile=1($|&) # 跳转至原路径,末尾加?用于丢弃原有查询字符串 RewriteRule ^ %{REQUEST_URI}? [R=301,L,NC]
方案2:保留除mobile=1之外的其他查询参数
如果你的场景需要保留其余参数,比如/page/?a=1&mobile=1&b=2跳转至/page/?a=1&b=2,可以用以下规则:
RewriteEngine On RewriteCond %{QUERY_STRING} ^(.*&)?mobile=1(&.*)?$ # 拼接mobile=1前后的剩余参数 RewriteRule ^ %{REQUEST_URI}?%1%2 [R=301,L,NE,NC]
注意事项
测试301永久跳转前建议先把R=301改成R=302做临时跳转测试,确认规则生效后再改回301,避免浏览器缓存旧的301规则导致测试异常。
内容的提问来源于stack exchange,提问作者S Schne
相关产品推荐
相关产品推荐

