如何在CodeIgniter 4中启用自动路由?配置后访问控制器出现404错误的求助
解决CodeIgniter 4启用自动路由后出现404的问题
你已经按文档开启了自动路由的相关配置,但还是遇到404,大概率是控制器的命名规范或者路由规则没匹配上,我帮你梳理几个关键检查点:
1. 严格遵守控制器的命名与位置规则
当autoRoutesImproved启用时,CI4对控制器的要求更严格:
- 控制器文件必须放在
app/Controllers目录下,文件名首字母必须大写,比如Pages.php(不能是pages.php) - 控制器类名要和文件名完全一致,同样首字母大写,并且继承
BaseController,示例代码:<?php namespace App\Controllers; class Pages extends BaseController { // 必须存在index方法,否则访问不带方法名的URL会404 public function index() { return "Hello from Pages controller!"; } }
2. 确认BaseURL配置正确
打开app/Config/App.php,检查$baseURL是否和你的访问路径匹配:
public string $baseURL = 'http://localhost/codeigniter4/';
如果这里设置错误,路由解析会出现偏差,导致404。
3. 理解autoRoutesImproved模式下的访问规则
启用改进版自动路由后,URL的匹配规则是:[你的BaseURL]/[控制器名小写]/[方法名小写]
- 你访问的
http://localhost/codeigniter4/pages,对应的是Pages控制器的index方法(默认方法),所以这个index方法必须存在于控制器中 - 如果你的控制器里是其他方法,比如
show(),那对应的访问URL应该是http://localhost/codeigniter4/pages/show
4. 检查是否有自定义路由冲突
查看app/Config/Routes.php中是否有提前定义的自定义路由,比如:
$routes->get('pages', 'Home::index');
自定义路由的优先级高于自动路由,如果有这类规则,会直接覆盖你的自动路由,导致404。
5. 清除路由缓存(如果开启过)
如果你之前使用过路由缓存,新的配置不会立即生效,需要清除缓存:
- 命令行运行:
php spark route:clear - 或者手动删除
writable/cache/routes.php文件
先从控制器命名和BaseURL这两个最常见的问题查起,应该就能解决你的404问题了。
内容的提问来源于stack exchange,提问作者Praveen
相关产品推荐
相关产品推荐

