如何将带/?1的URL重定向至目标路径并移除?1
解决带/?1的URL重定向问题
我来帮你搞定这个重定向的坑!之前的配置没生效,主要是没搞清楚Apache Rewrite规则里「请求路径」和「查询字符串」的区别,我给你拆解下问题,再直接给可行的配置方案:
先说说你之前配置的问题
- 第一种配置里,
%{REQUEST_URI}这个变量只包含请求的路径部分(也就是/path/to/page/),不包含?1这类查询字符串,所以那个RewriteCond永远匹配不到目标请求。而且RewriteRule的写法也缺少必要的重定向标记和正确的匹配模式。 - 第二种配置的规则只匹配
/path/to/page/(不带任何查询参数)的请求,带?1的请求根本触发不了这条规则,自然无效。
可行的重定向配置
根据你的需求,我们需要精准匹配「路径是/path/to/page/且查询字符串正好是1」的请求,然后重定向到目标路径并清除查询字符串。
如果你用的是 .htaccess 文件
把下面的规则加到你的.htaccess里:
# 匹配路径为/path/to/page/且查询字符串为1的请求 RewriteCond %{REQUEST_URI} ^/path/to/page/$ [NC] RewriteCond %{QUERY_STRING} ^1$ [NC] RewriteRule ^path/to/page/$ /other/path/to/page/? [R=301,L,NE]
参数说明:
[NC]:忽略大小写匹配(如果你的路径大小写固定,也可以去掉)- 目标路径末尾的
?:专门用来清除原请求的查询字符串,确保重定向后的URL不带?1 R=301:表示永久重定向(如果只是测试可以先用R=302临时重定向,确认没问题再换成301)L:表示这是最后一条规则,匹配后不再执行后续Rewrite规则NE:禁止转义特殊字符(这里场景下非必须,但加上更稳妥)
如果你在服务器配置文件(httpd.conf)里配置
规则和上面类似,只是RewriteRule的匹配模式需要开头的/:
RewriteCond %{REQUEST_URI} ^/path/to/page/$ [NC] RewriteCond %{QUERY_STRING} ^1$ [NC] RewriteRule ^/path/to/page/$ /other/path/to/page/? [R=301,L,NE]
配置完成后,访问https://www.example.com/path/to/page/?1就会自动重定向到https://www.example.com/other/path/to/page/,完美移除末尾的?1。
内容的提问来源于stack exchange,提问作者user3532637
相关产品推荐
相关产品推荐

