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

Apache mod Rewrite规则匹配忽略数字,如何调整使其正常生效?

问题原因

你使用的L标记仅会终止当前一轮的重写规则匹配,Apache会把重写后的URI重新投入处理流程,触发新一轮的重写规则校验,这就是规则表现差异的核心原因:

  • 匹配词为talis时:首次请求命中第一条规则重写到talis.php,新一轮匹配时talis.php路径本身包含talis,会再次命中第一条规则,不会走到第二条,最终返回talis.php符合预期。
  • 匹配词为talis01时:首次请求命中第一条规则重写到talis.php,新一轮匹配时talis.php路径不包含talis01,就会命中第二条规则,最终被重写到index.php。

解决方案

方案1(Apache 2.4及以上版本推荐)

将第一条规则的L标记替换为END标记,END标记会彻底终止所有后续重写流程,不会触发重入匹配:

RewriteEngine On
RewriteRule talis01 talis.php [END]
RewriteRule . index.php [L]

方案2(兼容Apache 2.2及更早版本)

给规则添加判断条件,仅对用户原始发起的请求生效,排除内部重定向的请求:

RewriteEngine On
RewriteCond %{REDIRECT_STATUS} ^$
RewriteRule talis01 talis.php [L]
RewriteCond %{REDIRECT_STATUS} ^$
RewriteRule . index.php [L]

方案3

直接匹配存储原始请求URI的%{REQUEST_URI}变量,该变量不会随重写操作变化:

RewriteEngine On
RewriteCond %{REQUEST_URI} talis01
RewriteRule ^ talis.php [L]
RewriteRule . index.php [L]

内容的提问来源于stack exchange,提问作者Itay Moav -Malimovka

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 06:15:07