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

.htaccess重写规则冲突:如何让文章与分类匹配规则共存?

问题根本原因

你的判断完全正确,规则失效的核心原因如下:

  • 文章和分类的两条重写规则正则匹配模式完全一致,均匹配站点根目录下的单级无斜杠路径
  • 规则末尾的[L]标记含义为「匹配成功后立即终止后续所有规则执行」,因此所有符合模式的请求都会被路由到article.php,分类规则永远不会被触发

可行解决方案

方案1:通过正则区分内容类型(无需修改路径结构)

如果你的分类ID为纯数字、文章slug包含字母或其他非数字字符,可以直接调整正则规则区分两类请求:

RewriteEngine on

RewriteRule ^$ /index.php [L]
# 分类规则前置,仅匹配纯数字的单级路径
RewriteRule ^(\d+)$ /cat.php?id=$1 [L]
# 文章规则匹配所有其他单级路径
RewriteRule ^([^/]*)$ /article.php?slug=$1 [L]

如果分类和文章的命名格式无法通过正则区分,建议使用下一种方案。

方案2:增加语义路径前缀(生产环境更推荐)

就是你之前测试可行的方案,给不同类型的资源增加统一的路径前缀,从根源上避免规则冲突,后续扩展其他页面类型也更方便:

RewriteEngine on

RewriteRule ^$ /index.php [L]
# 分类路径统一带cat前缀
RewriteRule ^cat/([^/]*)$ /cat.php?id=$1 [L]
# 文章规则保持无前缀也不会发生冲突
RewriteRule ^([^/]*)$ /article.php?slug=$1 [L]

该方案还可以避免文章slug和分类ID重名导致的匹配错误,可维护性更高。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 14:24:02