PHP网站.htaccess配置301重定向后出现多余参数问题求助
解决.htaccess 301重定向带多余query参数的问题
问题根源
你遇到的问题是重定向规则执行顺序错误,或混用了mod_alias(Redirect指令)与mod_rewrite规则,导致核心URL重写规则被触发,给新URL自动附加了?page=xxx参数。
正确解决方案
将mod_rewrite的重定向规则放在核心重写规则之前,确保旧URL被匹配后直接执行301跳转,不再触发后续核心规则。修改后的.htaccess内容如下:
<IfModule mod_rewrite.c> #Options +FollowSymlinks RewriteEngine On RewriteBase / # 新增301重定向规则,放在核心规则之前 RewriteRule ^folder/old-url-london.htm$ /new-url-london/ [R=301,L,NC] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^(.*)$ /index.php?page=$1 [NC,L,QSA] Options -Indexes </IfModule>
为什么之前的方法无效
- 使用
Redirect指令:Redirect属于mod_alias模块,执行逻辑与mod_rewrite不同。触发跳转后,新URL/new-url-london/会被mod_rewrite核心规则处理(该路径并非真实文件/目录),因此自动加上了?page=folder/old-url-london.htm参数。 - 重定向规则放在核心规则之后:若把
RewriteRule放在核心规则后面,请求旧URL时会先满足核心规则的!-f和!-d条件,优先执行核心重写,后续重定向规则不会被触发。
注意事项
- 测试前清除浏览器缓存,301永久重定向会被浏览器缓存,旧缓存可能导致测试结果不准确。
[NC]标志为可选,用于忽略URL大小写匹配,不需要可直接去掉。
内容的提问来源于stack exchange,提问作者Harry
相关产品推荐
相关产品推荐

