如何移除URL中问号及后续字符串?重写规则求助
解决URL重写移除多余查询字符串的问题
你的问题出在RewriteRule的匹配逻辑上——它默认只认?前面的路径部分,不管后面的查询字符串,而且你写的正则里?是正则特殊符号,不是字面的问号,所以之前的规则根本没匹配到目标请求。
给你两个可行的方案:
方案1:针对固定URL(仅处理domain.com/string?string)
把这段规则放到你的.htaccess文件里:
# 匹配路径是/string且查询字符串正好是string的请求 RewriteCond %{REQUEST_URI} ^/string$ RewriteCond %{QUERY_STRING} ^string$ # 重定向到/string,末尾的?会清空查询字符串 RewriteRule ^(.*)$ /$1? [L,R=301]
- 细节说明:
- 前两行
RewriteCond分别锁定路径和查询字符串,确保只处理目标请求 R=301是永久重定向,能让谷歌更新它的收录记录L表示执行完这条规则就停止,避免和其他规则冲突
- 前两行
方案2:通用规则(处理所有domain.com/x?x形式的URL)
如果不止这一个URL有问题,而是所有路径=查询字符串的情况都要处理,用这个:
RewriteCond %{REQUEST_URI} ^/(.+)$ RewriteCond %{QUERY_STRING} ^%1$ RewriteRule ^(.*)$ /$1? [L,R=301]
- 细节说明:
%1是引用第一个RewriteCond里捕获的路径内容,这样就能自动匹配任意x?x格式的URL
最后提醒:要确保你的服务器开启了mod_rewrite模块,不然这些规则不会生效。
内容的提问来源于stack exchange,提问作者John Hatcher
相关产品推荐
相关产品推荐

