codeigniter 默认控制器由 routes.php 中 $route['default_controller'] 设置决定,需确保控制器文件存在、类名与文件名首字母大写匹配、含 index() 方法;子目录控制器须按 admin/dashboard 格式配置路径并严格遵循命名和位置规范。

CodeIgniter 默认控制器决定用户访问网站根路径(如 http://yourdomain.com/)时加载哪个控制器和方法。配置错误或控制器缺失,会直接触发 404 错误。
确认 routes.php 中的 default_controller 设置
打开 application/config/routes.php,检查是否已正确定义:
- $route['default_controller'] = 'Home'; —— 表示默认加载 Home.php 控制器,且调用其 index() 方法
- $route['default_controller'] = 'admin/Dashboard'; —— 表示加载 admin/Dashboard.php(子目录控制器),调用其 index() 方法
- 注意:控制器类名必须首字母大写,文件名也必须完全匹配(如 Home.php,不是 home.php 或 HOME.php)
确保控制器文件存在且含 index() 方法
CodeIgniter 默认尝试调用 index() 方法。若控制器中未定义该方法,即使文件存在也会报 404:
- 例如,设
$route['default_controller'] = 'Crud';,但 Crud.php 只有savedata(),没有index()→ 必然 404 - 解决办法:在控制器中添加一个空的或有逻辑的
public function index(),哪怕只是跳转或加载视图 - 不推荐删掉
index()后靠路由硬映射其他方法——这违背默认行为预期,易引发维护混乱
子目录控制器需额外注意路径与命名
CI 默认只扫描 controllers/ 根目录。若控制器放在子目录(如 controllers/admin/Dashboard.php),需满足:
- 路由中写法必须是
$route['default_controller'] = 'admin/Dashboard';(斜杠分隔,无扩展名) - 文件路径必须严格为:application/controllers/admin/Dashboard.php
- 类名必须为 Dashboard(首字母大写),且继承
CI_Controller或Controller - CI3+ 原生支持子目录,默认即可工作;若仍报错,请检查文件权限、大小写、PHP 语法错误
验证是否生效的小技巧
配置完别急着刷新页面,先快速排查几个关键点:
- 清空 application/cache/ 下所有缓存文件(CI 有时缓存旧路由)
- 在浏览器直接访问 /index.php/控制器名(如 /index.php/Home),确认控制器本身可运行
- 临时在 Home.php 的
index()方法里加echo 'OK'; exit;,排除视图或逻辑干扰 - 查看 PHP 错误日志(php_errors.log 或 CI 的 logs/log-*.php),常能定位到“找不到文件”或“类未定义”等具体原因











