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

Mod Rewrite连续规则的URL使用逻辑咨询

Mod Rewrite连续规则的URL使用逻辑咨询

嘿,这个问题我当初刚摸mod_rewrite的时候也纠结过,刚好能给你掰扯清楚~

默认情况下,mod_rewrite的规则是链式处理的:当第一条RewriteRule匹配并完成重写后,重写后的URL会作为第二条规则的"输入",也就是第二条规则会基于这个修改后的路径去匹配,而不是原始URL。

举个实际的例子你一看就懂:

# 第一条规则:把 /about-us 重写成 /about
RewriteRule ^about-us$ /about
# 第二条规则:把 /about 重写成 /info
RewriteRule ^about$ /info

如果用户访问yourdomain.com/about-us,第一条规则会先把路径改成/about,紧接着第二条规则会匹配这个新路径,最终把它改成/info——整个流程是接力式的。

不过这里要注意[L]标志的影响:如果第一条规则加了[L](代表Last),那在当前规则处理轮次里,后续的规则就不会再执行了。比如:

RewriteRule ^about-us$ /about [L]
RewriteRule ^about$ /info

这时候访问/about-us,只会被重写成/about,第二条规则不会触发,因为[L]让当前轮次的规则处理直接终止。

要是你想让后续规则始终基于原始URL来匹配,那可以通过%{REQUEST_URI}这个服务器变量来引用原始请求路径,比如:

RewriteRule ^about-us$ /about
# 只有当原始请求是 /about-us 时,才触发这条规则
RewriteCond %{REQUEST_URI} ^/about-us$
RewriteRule ^.*$ /another-page

这里第二条规则的RewriteCond检查的是原始的请求URI,所以哪怕第一条规则已经把路径改成了/about,这条规则依然会因为原始请求是/about-us而触发。

其实这个逻辑在官方文档里是有提到的,不过确实藏在“规则处理流程”的细节里,容易被忽略~

备注:内容来源于stack exchange,提问作者eos

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.23 16:04:09