模块注册后url仍404,须依次排查:modules配置是否在顶层键下且被加载、urlmanager是否为模块添加显式路由规则(如'users/' => 'users/')、web服务器是否正确传递path_info(需nginx启用fastcgi_split_path_info等),以及模块控制器和视图路径是否严格匹配物理位置。

模块注册了但 URL 仍 404,先查 modules 配置是否生效
Yii2 不会自动扫描目录加载模块,modules 数组必须在 config/web.php(或高级模板的 environments/dev/frontend/config/main-local.php)中显式声明,且配置必须被实际加载。常见失效场景包括:
- 把模块配置写在
'components'或其他嵌套数组里,而不是顶层'modules'键下 - 用了高级模板却只改了
frontend/config/main.php,没同步更新backend/config/main.php(前后端是两个独立应用) - 模块 ID 大小写不一致:配置中是
'users',但请求 URL 写成/Users/xxx(Yii2 路由默认区分大小写) - 模块类路径错误:
'class' => 'app\modules\users\UsersModule'中的命名空间与实际文件物理路径不匹配,或未通过 Composer autoload 注册
urlManager 没配对模块路由规则,enablePrettyUrl 就是摆设
启用美化 URL 后,Yii2 默认只识别 <controller>/<action></action></controller> 这种两级结构。模块访问需明确告诉路由“第一段是模块名”,否则 /users/profile 会被当成控制器 users、动作 profile,根本不会进 users 模块。
开箱即用的技能链路由引擎。13 条预定义链覆盖搜索、开发、审查、MLOps、法律、创意等场景,三层路由架构(触发词→SAD反馈→DAG编排),recall@10=96.97%。配置驱动(chains.yaml),零代码扩展。pip install skill-weave-chains 一键安装。
- 必须在
urlManager['rules']中添加显式规则,例如:'users/<controller:>/<action:>' => 'users/<controller>/<action>'</action></controller></action:></controller:> - 若模块有默认控制器(如
UsersModule::$controllerNamespace = 'app\modules\users\controllers'),还需补上短规则:'users' => 'users/default/index' - 高级模板中,前端和后端的
urlManager必须分开配置——共用同一份规则是 404 最隐蔽的来源之一
Nginx/Apache 没把 PATH_INFO 正确传给 PHP,模块路由直接被截断
即使模块和规则都对,Web 服务器若没把原始请求路径(如 /users/profile)拆解并注入 $_SERVER['PATH_INFO'],Yii2 就只能看到 /index.php,后面所有模块、控制器信息全丢。
- Nginx 必须在
location ~ \.php$块中启用:fastcgi_split_path_info ^(.+\.php)(/.+)$;,再加fastcgi_param PATH_INFO $fastcgi_path_info; - Apache 下确保
.htaccess存在且生效(尤其 shared hosting 环境),内容至少含:RewriteRule ^(.*)$ index.php?r=$1 [L,QSA] - 验证方法:在
web/index.php开头临时加var_dump($_SERVER['PATH_INFO']); die();,访问/users/profile应输出string(15) "/users/profile",否则就是 Web 服务器层问题
模块控制器或视图路径错位,404 实际是找不到文件
模块路由解析成功后,Yii2 会尝试加载 app\modules\users\controllers\ProfileController,再渲染 app\modules\users\views\profile\index.php。任一环节路径不对,就静默 404。
- 检查控制器命名空间是否与模块定义一致:
UsersModule::$controllerNamespace必须指向真实路径,不能漏掉controllers - 视图文件必须放在模块内
views子目录下,不是全局@app/views;例如ProfileController::actionIndex()默认找app/modules/users/views/profile/index.php - 若控制器继承自
\yii\web\Controller但没指定public $layout = '@app/views/layouts/main',可能因布局文件缺失导致白屏而非报错
$_SERVER['PATH_INFO'] 有没有、Yii::$app->getModule('users') 能不能拿到实例、app\modules\users\controllers\ProfileController 文件能不能被 require_once 成功。










