
本文详解新手常见问题:为何 localhost/home 返回 404?核心原因在于 CodeIgniter 4 默认不启用自动路由,必须显式声明路由规则;只需在 app/Config/Routes.php 中添加对应路由映射,即可让 URL 正确指向控制器方法。
本文详解新手常见问题:为何 `localhost/home` 返回 404?核心原因在于 codeigniter 4 默认不启用自动路由,必须显式声明路由规则;只需在 `app/config/routes.php` 中添加对应路由映射,即可让 url 正确指向控制器方法。
CodeIgniter 4 采用显式路由优先的设计原则,与 CI3 的“自动路由(Auto Routing)”不同——即使你已创建了 App\Controllers\Home 类并定义了 index() 方法,框架也不会自动将 /home URL 映射到该控制器,除非你明确配置。
✅ 正确配置基础路由
打开 app/Config/Routes.php,在默认路由区块中添加如下语句(建议放在 $routes->get('/', 'Home::index'); 之后、$routes->set404Override() 之前):
// app/Config/Routes.php
$routes->get('/home', 'Home::index');
此时访问 http://localhost/home 即可正常加载 Home 控制器的 index() 方法,并渲染 welcome_message 视图。
? 提示:CI4 的路由语法为 $routes->{method}('{uri}', '{controller}::{method}');,其中 {uri} 是完整路径(含前导 /),{controller}::{method} 使用双冒号分隔,且控制器名不带 .php 后缀,也不含命名空间前缀(框架自动解析 App\Controllers\)。
在SEO发布前,从路由清单生成XML网站地图和robots.txt下载当代理已经知道网站路由或内容URL,并且在启动前需要有效的sitemap XML、sitemap索引或robots.txt引用时,请使用sitemap。这是一个发布构件技能,而不是爬虫或SEO平台。
? 支持更灵活的路由模式(可选进阶)
若希望支持类似 /home/about 或 /products/{id} 等动态路径,可使用占位符:
// 匹配 /home/about → 调用 Home::about()
$routes->get('/home/about', 'Home::about');
// 匹配 /product/123 → 调用 Product::view($id)
$routes->get('/product/(:num)', 'Product::view/$1');
// 批量注册资源路由(适合 CRUD 场景)
$routes->resource('posts');
⚠️ 常见错误排查清单
- ❌ 未启用重写模块:确认 Apache 的 mod_rewrite 已启用(XAMPP 默认开启),且项目根目录下的 .htaccess 文件存在并生效(位于 public/ 目录下)。
- ❌ URL 多余 index.php:若仍需 http://localhost/index.php/home 才能访问,说明重写失败,请检查 .htaccess 是否被忽略或 httpd.conf 中 AllowOverride All 是否已设置。
- ❌ 控制器命名不规范:确保文件名为 Home.php(首字母大写),类名为 Home(非 home 或 HomeController),且严格继承 BaseController。
- ❌ 缓存干扰:修改路由后,执行 php spark cache:clear 清除路由缓存(CI4 v4.4+ 默认启用路由缓存)。
✅ 验证与测试建议
完成配置后,运行以下命令查看当前有效路由列表,快速验证是否注册成功:
php spark routes
输出中应包含类似条目:
GET | /home | App\Controllers\Home::index
至此,你的 Home 控制器即可通过 /home 正常访问。记住:在 CodeIgniter 4 中,“有控制器 ≠ 有路由”,路由必须显式声明——这是安全性和可维护性的设计取舍,也是你迈出框架掌握的第一步。











