codeigniter路由配置需版本匹配、位置正确、顺序合理、服务器配合四者到位;ci3用application/config/routes.php数组赋值,ci4用app/config/routes.php中$routes->get()等方法,泛化规则须置尾,去index.php需web服务器重写支持。

CodeIgniter 路由配置不是写几行规则就完事,关键在于版本匹配、位置正确、顺序合理、服务器配合四者到位。CI3 和 CI4 的写法完全不同,混用会导致路由完全不生效,连错误提示都没有。
先确认你用的是 CI3 还是 CI4
两者路由文件位置和语法不兼容,不能互换:
-
CI3:修改 application/config/routes.php,用
$route['about'] = 'pages/view/about';这类数组赋值方式 -
CI4:修改 app/Config/Routes.php,必须调用
$routes->get()、$routes->post()等方法,$route数组已废弃,写了也无效
写法要对,常见映射方式
无论哪个版本,核心都是把 URL 路径映射到控制器方法:
开箱即用的技能链路由引擎。13 条预定义链覆盖搜索、开发、审查、MLOps、法律、创意等场景,三层路由架构(触发词→SAD反馈→DAG编排),recall@10=96.97%。配置驱动(chains.yaml),零代码扩展。pip install skill-weave-chains 一键安装。
- 静态映射:
$route['contact'] = 'pages/contact';(CI3)或$routes->get('contact', 'Pages::contact');(CI4) - 带数字参数:
$route['news/(:num)'] = 'news/show/$1';(CI3)或$routes->get('news/(:num)', 'News::show/$1');(CI4) - 带任意字符串:
$route['user/(:any)'] = 'profile/index/$1';或正则更精准:$route['file/([a-z0-9_\-\.]+)'] = 'files/download/$1';(避免点号、空格、中文等非法字符直接进 key)
顺序很重要,泛化规则放最后
路由是按代码顺序从前到后匹配,一旦命中就停止。所以具体规则必须写在泛化规则前面:
- ❌ 错误:把
$route['article/(:any)'] = 'blog/show/$1';放最前 →/article/archive/2026会被它吃掉,后面的/article/archive/(:num)永远不执行 - ✅ 正确:先写
$route['article/archive/(:num)'] = 'blog/archive/$1';,再写$route['article/(:any)'] = 'blog/show/$1';
去掉 index.php 不是路由的事
浏览器地址栏还显示 index.php/about?说明请求根本没进框架,路由配置再完美也没用。这是 Web 服务器配置问题:
-
Apache:确保启用
mod_rewrite,项目根目录(CI3)或public/目录(CI4)下有有效.htaccess,且对应目录的AllowOverride All已开启 -
Nginx:必须配置
try_files $uri $uri/ /index.php?$query_string; - 改完记得清浏览器缓存,尤其隐身窗口测试——302 重定向容易被缓存,你以为没生效,其实是旧跳转在捣鬼










