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

Htaccess RewriteRule规则冲突求助:第二条规则无法生效

解决.htaccess RewriteRule规则匹配优先级问题

当前第一条规则的正则表达式^([a-z-]+)/([a-z-]+)-([0-9]+)$会匹配所有形如/xxx/yyy-xxxx的URL,包括/james/year-2023——因为([a-z-]+)可以匹配"year",导致请求被第一条规则优先处理,第二条规则永远无法触发。

方案1:调整规则顺序(推荐)

RewriteRule按从上到下的顺序匹配规则,带[L]标记的规则匹配成功后会停止后续处理。把更具体的第二条规则放在第一条前面即可:

RewriteRule ^([a-z-]+)/year-([0-9]+)$ /year.php?name=$1&y=$2 [L,QSA,NC]
RewriteRule ^([a-z-]+)/([a-z-]+)-([0-9]+)$ /all.php?name=$1&m=$2&y=$3 [L,QSA,NC]

此时访问/james/year-2023会先匹配第二条规则,跳转到year.php;访问/james/january-2023则匹配第一条规则,跳转到all.php。

方案2:修改第一条规则的正则表达式

在第一条规则的第二个分组前添加负向先行断言,排除"year"字符串,确保仅当第二部分不是"year"时才触发第一条规则:

RewriteRule ^([a-z-]+)/(?!year)([a-z-]+)-([0-9]+)$ /all.php?name=$1&m=$2&y=$3 [L,QSA,NC]
RewriteRule ^([a-z-]+)/year-([0-9]+)$ /year.php?name=$1&y=$2 [L,QSA,NC]

(?!year)表示当前位置后不能是"year",因此/james/year-2023不会被第一条规则匹配,转而由第二条规则处理。

内容的提问来源于stack exchange,提问作者M.Nguyen

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 17:12:13