Apache mod_rewrite 没有 END 标志位,官方从未实现;等效终止当前规则链的是 L(Last)标志,它使匹配后不再执行同阶段后续规则。

Apache 的 mod_rewrite 并**没有 END 标志位**。这是常见误解,源于将 Nginx 的 end 指令或某些第三方补丁/文档混淆进了 Apache 体系。
为什么不存在 END 标志
Apache 官方 mod_rewrite 支持的标志(flags)中,截至 2026 年最新稳定版(如 httpd 2.4.x),从未定义或实现过 END。所有权威文档、模块源码和发行说明均无此 flag。试图在 RewriteRule 中使用 [END] 会导致配置语法错误,Apache 启动失败或规则被忽略。
真正能“终止重写流水线”的等效方式是 L
L(Last rule)是 Apache 中唯一且标准的“终止当前轮次重写处理”的标志:
Apache Superset 是一个广泛采用的开源 BI 平台,用于 SQL 探索、图表构建和仪表板交付。当代理需要查询仓库数据、组装仪表板或使用成熟的分析界面解释指标而不是临时笔记本代码时,此技能非常有用。
- 它告诉
mod_rewrite:本规则匹配并执行后,不再检查后续同阶段(如同一 .htaccess 或同一<directory></directory>块)的其他规则; - 注意:L 不阻止内部子请求或后续处理阶段(如别名映射、内容协商),但它确实终结了当前重写规则链的遍历;
- 示例:
RewriteRule ^/old/(.*)$ /new/$1 [L]—— 匹配后立即停止,不走下面的规则。
需要彻底阻断重写?配合其他机制
若场景要求“完全跳过所有重写逻辑”(比如某路径必须原样透传),可组合使用:
-
RewriteRule ^/static/ - [L]:用-表示不替换,[L]终止,让该路径绕过后续重写; -
RewriteCond %{REQUEST_URI} !^/api/+RewriteRule ... [L]:用条件排除特定路径,再对剩余路径统一处理; - 在虚拟主机或服务器级配置中,用
<location></location>或<directory></directory>隔离作用域,避免规则污染。
警惕伪 END 实现(不推荐)
网上偶见用 [R=301,L] 或 [G,L] 模拟“终结”,但这本质是触发 HTTP 响应(跳转或 410),并非静默终止重写流程。真实需求是内部路径终止时,这类做法会暴露重定向、破坏 SEO 或引发循环,应避免。

















