求助:.htaccess中带参数的旧站URL重定向失效
问题原因与解决方案
核心问题
你的带参数重定向规则失效,根源是第一个RewriteRule语法完全错误,同时缺少旧站主机的限定,导致这条规则根本不会被执行,请求直接进入了第二条通用重定向规则,最终带着原参数跳转到新站。
具体错误点:
RewriteRule的语法要求第一个参数是匹配请求路径的正则表达式,但你直接把目标URLhttp://newsite.com/about/写在了匹配位置,Apache无法识别这条规则,直接跳过。- 第一个规则未限定仅作用于
oldsite.com,即便语法正确,也可能误匹配其他主机请求(不过语法错误是首要问题)。
修正后的配置
<IfModule mod_rewrite.c> RewriteEngine On # 针对 oldsite.com 根路径下带 page_id=4 参数的请求重定向 RewriteCond %{HTTP_HOST} ^oldsite.com$ RewriteCond %{QUERY_STRING} ^page_id=4$ RewriteRule ^$ http://newsite.com/about/ [QSD,R=301,L] # 通用重定向:oldsite.com 所有内容跳转至 newsite.com RewriteCond %{HTTP_HOST} ^oldsite.com$ RewriteRule (.*)$ http://newsite.com/$1 [R=301,L] </IfModule>
修正说明
- 添加旧站主机限定:给第一个规则加上
RewriteCond %{HTTP_HOST} ^oldsite.com$,确保只处理旧站的请求。 - 修正
RewriteRule匹配模式:用^$匹配根路径(对应oldsite.com/?page_id=4的路径部分/),如果需要匹配所有路径下的page_id=4参数,可以把匹配模式改成^.*$。 - 保留原有标志:
QSD用于清除原请求的查询参数,R=301标记永久重定向,L表示执行完这条规则后停止后续规则处理。
注意事项
测试前请清空浏览器缓存,因为301永久重定向会被浏览器缓存,旧的缓存结果可能会掩盖修正后的效果。
内容的提问来源于stack exchange,提问作者PatInParis
相关产品推荐
相关产品推荐

