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

新增第二条RewriteRule后第一条规则被跳过的.htaccess配置问题

问题核心原因

  • 第一条HTTPS跳转规则未添加[L]终止标记,mod_rewrite会顺序执行完所有规则,第二条带[L]的规则会直接覆盖第一条的跳转目标,导致/BBB后缀丢失
  • %{REQUEST_URI}变量取的是请求初始的URI,不会被同轮次里前面的重写规则修改,因此即便先执行路径替换,直接用%{REQUEST_URI}拼接也带不上修改后的路径内容
  • 跳转类规则未显式指定R标记,容易出现内部重写和外部跳转的逻辑歧义

修复方案

方案1:保留原有逻辑,加终止标记(完全匹配你的预期)

给第一条规则加[L,R=302],通过两次跳转拿到目标结果:

RewriteEngine On
RewriteBase /

RewriteCond %{HTTPS} off
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI}/BBB [R=302,L]

RewriteRule ^REMOVE(/.*)?$ https://%{HTTP_HOST}$1/CCC [R=302,L]

执行流程:

  1. 第一次请求http://test-domain.com/REMOVE/AAA,匹配第一条规则跳转到https://test-domain.com/REMOVE/AAA/BBB
  2. 第二次HTTPS请求进来,匹配第二条规则跳转到https://test-domain.com/AAA/BBB/CCC

方案2:单轮一次跳转(推荐,减少3xx跳转次数)

先完成路径修改,再统一处理HTTPS跳转和后缀拼接,只触发一次跳转:

RewriteEngine On
RewriteBase /

# 先处理REMOVE前缀移除,按顺序拼接BBB、CCC后缀,内部重写不跳转
RewriteRule ^REMOVE(/.*)?$ $1/BBB/CCC [DPI]

# 统一处理HTTPS跳转
RewriteCond %{HTTPS} off
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [R=302,L]

额外注意事项

  • 测试阶段建议用R=302临时重定向,避免浏览器缓存301永久重定向导致规则修改不生效
  • [DPI]标记用于丢弃原始请求的路径信息,确保重写后的路径后续处理正常
  • 涉及域名的跳转建议显式加L标记,避免后续规则覆盖跳转目标

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 16:48:04