应使用路由组为后台统一添加/admin前缀:CI3需手动拼写每条admin/xxx规则并注意控制器命名规范;CI4必须用$routes->group('admin', function($routes){...})闭包语法,不可赋值;根路径与/admin路径需分别设置默认控制器;还需确保Web服务器正确转发请求。

用路由组给后台加 admin 前缀,核心是把所有后台相关路径统一挂到 /admin/xxx 下,并正确映射到对应控制器。不同版本写法差异大,搞错就完全不生效。
CI3:用数组模拟分组,顺序和写法要小心
CI3 没有原生路由组语法,靠手动拼前缀实现效果:
- 把后台路径全写成
admin/xxx形式,右边控制器也按实际路径写,比如:$route['admin'] = 'admin/dashboard';$route['admin/users'] = 'admin/user/list';$route['admin/settings'] = 'admin/config/edit'; - 注意不要漏掉
admin/开头的规则——它不是自动继承的,每条都得显式写全 - 如果后台控制器在
application/controllers/admin/目录下,类名必须是Admin_dashboard、Admin_user这种(下划线分隔),否则会找不到类
CI4:必须用 group() + 闭包,不能赋值
CI4 的 $routes->group() 是真分组,但写法很关键:
开箱即用的技能链路由引擎。13 条预定义链覆盖搜索、开发、审查、MLOps、法律、创意等场景,三层路由架构(触发词→SAD反馈→DAG编排),recall@10=96.97%。配置驱动(chains.yaml),零代码扩展。pip install skill-weave-chains 一键安装。
- 正确写法是调用方法并传入闭包:
$routes->group('admin', function($routes)<br>{<br> $routes->get('dashboard', 'Admin\Dashboard::index');<br> $routes->get('users', 'Admin\User::list');<br> $routes->post('users/save', 'Admin\User::save');<br>}); - 错误写法(常见坑):
$routes->group('admin') = function($routes) { ... };→ 语法合法但整个分组被忽略,php spark routes也查不到 - 闭包内定义的路由,URL 自动带
/admin/前缀,控制器命名空间要匹配真实路径,比如App\Controllers\Admin\Dashboard
前后台共存时的默认控制器设置
根路径(/)和后台路径(/admin)要分开指向:
- CI3:
$route['default_controller'] = 'home'; // 前台首页<br>$route['admin'] = 'admin/dashboard'; // 访问 /admin 跳后台首页
- CI4:
$routes->get('/', 'Home::index');<br>$routes->group('admin', function($routes)<br>{<br> $routes->get('/', 'Admin\Dashboard::index'); // /admin/ 显示后台首页<br>});
别忘了 Web 服务器配置
路由前缀能生效,前提是请求真到了 CodeIgniter。如果浏览器地址栏还显示 index.php/admin,说明 Apache/Nginx 没转发成功:
- Apache:确认
.htaccess已启用,且包含标准重写规则 - Nginx:必须有
try_files $uri $uri/ /index.php?$query_string;,否则/admin/xxx会直接 404 - 改完配置记得重启服务,浏览器用隐身窗口测试,避免 302 缓存干扰判断


















