CodeIgniter路由组不支持真正嵌套,CI3靠路径前缀模拟分组,CI4需用闭包调用$routes->group(),且多层group不推荐超过两层;须严守版本语法、Web服务器重写配置及匹配顺序。

CodeIgniter 路由组本身不支持“嵌套”意义上的多层父子结构(比如 /admin/users/list 通过多级 group 声明),它靠的是**顺序匹配 + 前缀拼接 + 手动模拟分组逻辑**,关键在写法严谨、顺序合理、避免冲突。
CI3 中用 $route 模拟路由组
CI3 没有原生 group() 方法,但可通过路径前缀和占位符实现逻辑分组效果:
开箱即用的技能链路由引擎。13 条预定义链覆盖搜索、开发、审查、MLOps、法律、创意等场景,三层路由架构(触发词→SAD反馈→DAG编排),recall@10=96.97%。配置驱动(chains.yaml),零代码扩展。pip install skill-weave-chains 一键安装。
-
按模块写前缀规则:例如统一把后台路由归到
admin/下:$route['admin/dashboard'] = 'admin/dashboard/index';$route['admin/users'] = 'admin/users/index';$route['admin/users/(:num)'] = 'admin/users/view/$1'; -
避免泛化规则抢跑:把具体路径放前面,通配符放后面。错误示例:
$route['admin/(:any)'] = 'admin/router/$1';→ 会吞掉所有/admin/*,包括/admin/login;正确做法是先写/admin/login、/admin/logout等固定路由,再写泛化规则。 -
用正则增强控制力:比如只允许数字ID:
$route['api/v1/user/(\d+)'] = 'api/user/show/$1';,比(:num)更明确,也防注入。
CI4 中用 $routes->group() 正确闭包写法
CI4 提供了真正的 group() 方法,但必须配合闭包使用,且不能赋值、不能省略参数:
-
语法必须是函数调用形式:
$routes->group('admin', function($routes) {<br> $routes->get('dashboard', 'Admin\Dashboard::index');<br> $routes->get('users', 'Admin\Users::index');<br> $routes->post('users', 'Admin\Users::store');<br>});
这样注册的路由实际路径是/admin/dashboard、/admin/users。 -
支持多层 group(但不推荐过深):
$routes->group('api', function($routes) {<br> $routes->group('v1', function($routes) {<br> $routes->group('users', function($routes) {<br> $routes->get('', 'Api\V1\Users::index');<br> $routes->post('', 'Api\V1\Users::create');<br> });<br> });<br>});
最终路径为/api/v1/users,但三层已接近可读性临界点,建议 ≤2 层。 -
group 内无法自动继承中间件:若需权限控制,得在目标 group 内显式绑定过滤器:
$routes->group('admin', ['filter' => 'auth'], function($routes) { ... });
或单独定义:$routes->group('admin', function($routes) {<br> $routes->addFilter('auth');<br> $routes->get('dashboard', ...);<br>});
共通避坑要点
-
别混版本写法:CI3 里写
$routes->group()直接无效;CI4 里继续用$route['xxx']数组写法也不会加载——两者路由文件位置、语法、加载机制完全不同。 -
去掉 index.php 不是路由的事:如果
/admin/dashboard报 404,先检查 Apache/Nginx 是否已配置重写规则并启用mod_rewrite(Apache)或try_files(Nginx),确保请求真正进了框架。 - 浏览器缓存 302 会干扰测试:改完路由后用隐身窗口验证,否则可能看到的是旧重定向结果,误判配置失败。


















