yii2高级模板子域名路由由web服务器(nginx/apache)实现,非urlmanager配置;必须为frontend和backend分别配置独立server块,root精确指向各自web目录,urlmanager仅在请求送达对应index.php后才生效。

子域名路由在 Yii2 高级模板里根本不是靠 urlManager 配置出来的,而是靠 Web 服务器(Nginx/Apache)把不同子域名直接指向不同物理目录——frontend/web 和 backend/web 是两个独立入口,不能混用。
为什么 urlManager 规则对子域名完全无效
urlManager 只负责请求进来之后的路径解析,它不读取 HTTP Host 头,也不决定哪个 index.php 先执行。当你访问 admin.example.com,如果 Nginx 没把它转给 backend/web/index.php,那整个 backend 应用压根没启动,urlManager 根本没机会运行。
- 常见错误:只在
common/config/main.php或frontend/config/main.php里加urlManager规则,结果子域名访问 404 或跳到 frontend - 更隐蔽的坑:在 frontend 里用
Yii::setAlias('@backend', ...),会导致 autoloader 冲突、vendor 类重复注册 -
bootstrap数组里写'backend'会直接报Class 'backend' not found——backend 不是模块,是另一个应用
Nginx 必须配两个独立 server 块
每个子域名对应一个 server 块,root 必须精确指向对应 web 目录,且必须包含 try_files $uri $uri/ /index.php?$args。
开箱即用的技能链路由引擎。13 条预定义链覆盖搜索、开发、审查、MLOps、法律、创意等场景,三层路由架构(触发词→SAD反馈→DAG编排),recall@10=96.97%。配置驱动(chains.yaml),零代码扩展。pip install skill-weave-chains 一键安装。
-
frontend示例:server_name www.example.com;+root /var/www/myapp/frontend/web; -
backend示例:server_name admin.example.com;+root /var/www/myapp/backend/web; - 绝对不要用
location /admin { alias /path/to/backend/web; }—— 这会让 session、asset 发布、CSRF token 全部错乱 - 两个 server 块都要配好
fastcgi_pass、index index.php,别漏掉include fastcgi_params;
子域名下启用美化 URL(去掉 index.php)
美化 URL 是每个应用自己控制的,frontend 和 backend 要分别在各自 config/main.php 里开 urlManager,不能共用一套配置。
- 必须同时设:
'enablePrettyUrl' => true和'showScriptName' => false,缺一不可 - Apache 用户:确保
.htaccess在对应web/目录下,且AllowOverride All已开启 - Nginx 用户:
try_files行不能少,否则所有美化路由都 404 - 规则顺序很重要:
'post/<id:>' => 'post/view'</id:>这种带参数的要放在泛化规则(如'' => 'site/index')前面
最常被忽略的是:子域名生效的前提是 DNS 解析已指向服务器 IP,且 Web 服务器监听了该 Host。哪怕 Nginx 配得再对,DNS 没刷或 server_name 拼错一个字母,请求就进不了任何 index.php —— 此时查 PHP 日志毫无意义,得先看 Nginx 的 access_log 确认请求到底打到了哪个 server 块。










