codeigniter 404错误通常由路由匹配失败、控制器/方法缺失或服务器url解析异常三方面导致;需依次检查默认控制器及index()方法是否存在、路由规则是否生效且顺序合理、nginx/apache重写配置是否正确,以及404视图中url辅助函数是否已加载。

CodeIgniter 访问路由一直 404,通常不是单一原因,而是多个环节断开导致的。核心要排查三块:路由规则是否匹配、控制器与方法是否存在、服务器环境是否正确解析 URL。下面分重点讲清楚。
检查默认控制器和 index() 方法是否就位
很多 404 其实发生在首页(根路径),根源是默认控制器没配好:
- 确认 application/config/routes.php 中设置了
$route['default_controller'] = 'Welcome';(或你自己的控制器名) - 进入 application/controllers/Welcome.php,检查类名是否为
Welcome,且包含public function index()方法 - 如果用的是自定义控制器(比如
Crud),但只写了savedata(),没写index(),访问根路径就会直接 404 —— 因为 CI 默认找Crud/index
验证路由规则是否真正生效
通配符如 (:any) 只匹配单段路径(不含 /),写成 $route['a/b/c'] 不会匹配 /a/b/c/d:
开箱即用的技能链路由引擎。13 条预定义链覆盖搜索、开发、审查、MLOps、法律、创意等场景,三层路由架构(触发词→SAD反馈→DAG编排),recall@10=96.97%。配置驱动(chains.yaml),零代码扩展。pip install skill-weave-chains 一键安装。
- 想支持任意深度并统一降级到前三段?用正则:
$route['(:any)/(:any)/(:any)/.*'] = 'pages/view/$1/$2/$3'; - 这条规则必须放在更具体的规则(如
$route['(:any)/(:any)/(:any)'])之后,否则会被提前截断 - 测试时清空浏览器缓存,或用
curl -I http://yoursite.com/test/a/b/c/d/e看真实响应头
排查服务器配置是否阻断了 URL 解析
尤其在 Nginx 环境下,404 很可能根本没进 CI,而是被 Web 服务器拦下了:
- Apache 用户:确认
.htaccess正确启用了重写,mod_rewrite已启用 - Nginx 用户:必须配置
fastcgi_split_path_info,否则/index.php/user/profile能通,/user/profile就 404 - 检查
application/config/config.php中$config['uri_protocol']是否与服务器匹配(Nginx 推荐设为'REQUEST_URI'或'QUERY_STRING',慎用PATH_INFO)
修复 404 页面自身崩溃的问题
有时看到的 404 实际是“404 页面报错”,比如 Call to undefined function base_url():
- 这是因为在 404 视图中调用了
base_url(),但url辅助函数未自动加载 - 解决方法:在
application/config/autoload.php中补上$autoload['helper'] = array('url'); - 或者,在自定义 404 控制器里手动加载:
$this->load->helper('url');










