You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

CodeIgniter 3 HMVC子文件夹路由配置异常,出现404错误

解决CodeIgniter 3 HMVC路由404问题

先梳理下你现有路由里的几个关键问题,再给出对应的修正方案:

1. 低级拼写错误(最容易踩的坑)

你多处把signin写成了sigin(少了一个n),比如这条路由:

$route['admin/sigin'] = "admin/sigin/signin/index";

这种拼写错误会直接导致系统找不到对应控制器,返回404。先把所有拼写统一修正为signin。

2. HMVC路由的正确格式

在CI3 HMVC架构中,路由目标的格式应该是**模块名/控制器名/方法名**,比如admin模块下的Signin控制器的index方法,正确写法是admin/signin/index(默认方法index可以省略,直接写admin/signin)。

你的现有路由存在路径冗余问题,比如admin/sigin/signin/index重复了signin,完全不符合HMVC的控制器路径逻辑。

3. 路由匹配顺序(CI路由从上到下优先匹配)

CI的路由规则是按顺序执行的,一旦某条规则匹配成功,就会忽略后续所有规则。所以通配符路由(比如(:any))必须放在所有具体路由的最后,否则会直接覆盖前面的精准路由。

4. 修正后的完整路由示例

假设你的模块是标准HMVC结构(基于MX扩展):

modules/
├─ admin/
│  ├─ controllers/
│  │  └─ Signin.php  // 控制器类名:Signin,继承MX_Controller
│  ├─ models/
│  └─ views/
└─ client/
   ├─ controllers/
   │  └─ auth/
   │     ├─ Login.php  // 控制器类名:Login,继承MX_Controller
   │     └─ Signup.php
   ├─ models/
   └─ views/

对应的正确路由配置如下:

// 默认控制器:访问根目录时跳转至admin模块Signin控制器的index方法
$route['default_controller'] = "admin/signin";

// 自定义admin/signin路由(如果URL和控制器路径一致,这条可以省略,CI会自动匹配)
$route['admin/signin'] = "admin/signin/index";

// client/auth 跳转至client模块下auth/Login控制器的login方法
$route['client/auth'] = "client/auth/login/login";

// admin下的其他路径匹配:比如admin/dashboard 对应admin模块的Dashboard控制器
// 注意:通配路由必须放在最后,避免覆盖前面的精准路由
$route['admin/(:any)/(:any)'] = "admin/$1/$2";
$route['admin/(:any)'] = "admin/$1/index";

额外调试建议

  • 检查控制器文件名和类名:CI3要求控制器文件名首字母大写(比如Signin.php),类名与文件名完全一致(class Signin extends MX_Controller),否则系统无法识别控制器。
  • 确认HMVC模块加载正常:在config/config.php中检查$config['modules_locations']是否正确配置模块路径,示例:
    $config['modules_locations'] = array(
        APPPATH.'modules/' => '../modules/',
    );
    
  • 开启CI日志功能:在config/config.php中设置$config['log_threshold'] = 2;,查看application/logs下的日志,能看到具体的路由匹配过程和错误细节,方便快速定位问题。

内容的提问来源于stack exchange,提问作者surma

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 04:09:26