codeigniter 官方路由不支持 (:hash) 占位符;它既非 ci3/ci4 原生语法,也非文档定义的通配符,常见于混淆 url hash 片段、自定义正则或第三方扩展。

CodeIgniter 官方路由系统中没有 (:hash) 这个占位符。
它不被 CodeIgniter 3 或 CodeIgniter 4 支持,也不是框架文档、源码或任何稳定版本中定义的合法路由通配符。
你看到的 (:hash) 很可能是以下几种情况之一:
混淆了前端 URL 的
#片段(hash)与后端路由机制:#section1是浏览器端的 URL hash,由 JavaScript 处理(如监听hashchange),服务端完全收不到——CodeIgniter 的路由运行在 PHP 层,无法匹配或解析#后的内容。HTTP 请求发送时,#及其后面的部分根本不会发给服务器。误将自定义正则写法当成了内置占位符:
CodeIgniter 允许用正则表达式定义路由,例如:$route['product/([a-f0-9]{32})'] = 'products/detail/$1';
有人可能用hash描述这种匹配 MD5 值的场景,但这是手动写的正则,不是(:hash)语法。与其他框架(如 Laravel)或插件命名习惯混淆:
某些第三方扩展或自定义路由类可能添加了:hash别名,但这不属于 CodeIgniter 原生能力。
CodeIgniter 原生支持的占位符只有这些:
开箱即用的技能链路由引擎。13 条预定义链覆盖搜索、开发、审查、MLOps、法律、创意等场景,三层路由架构(触发词→SAD反馈→DAG编排),recall@10=96.97%。配置驱动(chains.yaml),零代码扩展。pip install skill-weave-chains 一键安装。
-
(:any)— 匹配除/外的任意字符(常用) -
(:num)— 匹配一个或多个数字 -
(:alpha)— 匹配一个或多个字母 -
(:alphanum)— 匹配字母和数字组合
如果你想实现类似“按哈希值访问资源”的路由(比如 /item/abc123def456),正确做法是:
- 用
(:any)或更安全的正则(如([a-zA-Z0-9_-]+))捕获字符串 - 在控制器里做校验(如
ctype_xdigit()判断是否为十六进制,或验证长度/格式)
例如:
$route['item/([a-f0-9]{8,64})'] = 'items/view/$1';
这样既明确又可控,也避免了语义误导。
不复杂但容易忽略。










