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

.htaccess规则例外设置:portfolio页面特殊URL规则需求

解决.htaccess中Portfolio页面的规则例外问题

我来帮你搞定这个规则优先级的问题!其实核心原因很简单:.htaccess的重写规则是从上到下依次匹配的,你之前把Portfolio的新规则放在原有通用规则下面,导致请求Portfolio相关URL时,先触发了通用规则(把第二个参数识别成操作),自然新规则就没机会生效了。

正确的做法是把Portfolio的专属规则放在通用规则前面,并且用[L]标记让匹配到这条规则后就停止后续匹配。下面是具体的实现示例:

第一步:开启重写引擎(如果还没加的话)

RewriteEngine On

第二步:添加Portfolio页面的专属规则

这条规则会优先匹配所有/portfolio/分类/操作格式的URL,把分类和操作分别提取出来:

# 匹配 Portfolio 页面的「分类+操作」格式
RewriteRule ^portfolio/([^/]+)/(add|edit)$ index.php?page=portfolio&category=$1&action=$2 [L,QSA]
  • ^portfolio/:匹配以portfolio/开头的URL
  • ([^/]+):捕获分类值(匹配除了斜杠之外的任意字符)
  • (add|edit):仅允许add或edit两种操作
  • [L]:表示这是最后一条要执行的规则,匹配到后不再往下走
  • [QSA]:保留URL中原本的查询字符串(比如?id=123这类参数)

第三步:保留你的原有通用规则

这条规则会处理除了Portfolio之外的所有页面,因为Portfolio的请求已经被前面的规则拦截了:

# 通用页面的「页面+操作」格式(Portfolio除外)
RewriteRule ^([^/]+)/(add|edit)$ index.php?page=$1&action=$2 [L,QSA]

测试验证

现在访问/portfolio/web-design/add,应该能在后端拿到参数:
page=portfolio&category=web-design&action=add
而访问普通页面比如/blog/edit,依然会按原有规则解析成:
page=blog&action=edit

如果你的原有规则有其他自定义参数或者URL格式,只需要调整正则表达式的对应部分就行,核心逻辑不变:例外规则优先,用[L]终止后续匹配。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 09:17:25