You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

.htaccess配置301重定向旧URL被追加到新URL问题求助

问题根源

  • 规则执行顺序错误:你将单页重定向规则放在了框架入口路由规则之后,!-f !-d的规则命中不存在的/contactus/路径后,携带[L]标记终止了后续所有规则执行,导致末尾的重定向规则完全不会生效
  • mod_alias与mod_rewrite混用冲突:mod_alias的执行优先级高于mod_rewrite,使用Redirect规则触发跳转时,mod_rewrite已经将旧路径拼接为查询参数传递,就会出现跳转后URL末尾追加旧路径的问题
  • 冗余配置:整个.htaccess文件内仅需声明一次RewriteEngine On即可,重复声明不会提升执行效率,反而容易导致规则逻辑混乱

修复后的完整配置

<IfModule mod_security.c>
  SecFilterEngine Off
  SecFilterScanPOST Off
</IfModule>
RewriteEngine On

# HTTP转HTTPS
RewriteCond %{SERVER_PORT} 80
RewriteRule ^(.*)$ https://example.com/$1 [R=301,L]

# WWW跳转根域名
RewriteCond %{HTTP_HOST} ^www.example.com [NC]
RewriteRule ^(.*)$ https://example.com/$1 [L,R=301]

# 单页静态重定向,放在框架入口规则之前
RewriteRule ^contactus/$ https://example.com/contact-us/ [R=301,L,QSD]

# 框架入口路由规则
RewriteCond %{REQUEST_URI} ^/system.*
RewriteRule ^(.*)$ index.php?/$1 [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.+)$ index.php?/$1 [L]

验证注意事项

  • 修改配置后先清空浏览器缓存,301永久重定向会被浏览器长期缓存,测试阶段可以先将R=301改为R=302,确认跳转逻辑正常后再改回301
  • 若你的Apache版本低于2.4,不支持QSD标记,可以在重定向目标URL末尾加?,即https://example.com/contact-us/?,同样可以清除多余的查询参数

内容的提问来源于stack exchange,提问作者Bilal Arshad

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 09:24:02