Apache虚拟主机必须分别指向frontend/web和backend/web目录,不可指向项目根目录;否则因入口文件错位导致404、Class 'Yii' not found、跳转到frontend或403错误。

安装 Yii2 高级模板后,Apache 虚拟主机必须指向 frontend/web 或 backend/web 目录,不能指向项目根目录。否则会报 404、Class 'Yii' not found、跳转到 frontend 或直接 403 —— 这些都不是代码问题,而是入口路径错了。
确认 Apache 已启用必要模块
确保以下模块已开启:
- mod_rewrite:用于 URL 重写(美化 URL 依赖它)
- mod_headers(可选但推荐):部分 asset 或 cookie 配置需要
- mod_env(可选):环境变量控制用
Linux/macOS 下执行:
sudo a2enmod rewrite
Windows(XAMPP/WAMP)需在 httpd.conf 中取消以下行的注释:LoadModule rewrite_module modules/mod_rewrite.so
配置独立 VirtualHost 指向 web 子目录
不要共用一个 <virtualhost></virtualhost> 处理 frontend 和 backend。必须为每个应用单独配一个,且 DocumentRoot 精确到对应 web 目录:
- 前台站点:
DocumentRoot "/var/www/yii2-advanced/frontend/web",绑定ServerName www.example.com - 后台站点:
DocumentRoot "/var/www/yii2-advanced/backend/web",绑定ServerName admin.example.com
每个 <virtualhost></virtualhost> 内必须包含 <directory></directory> 块,并允许重写:
<Directory "/var/www/yii2-advanced/frontend/web">
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . index.php [L]
Require all granted
AllowOverride All
</Directory>
本地开发需配 hosts 文件
在系统 /etc/hosts(Linux/macOS)或 C:\Windows\System32\drivers\etc\hosts(Windows)中添加:
127.0.0.1 www.example.com<br>127.0.0.1 admin.example.com
这样浏览器访问 http://www.example.com 就走 frontend,http://admin.example.com 就走 backend,彻底避免子路径(如 /backend/web)引发的路由冲突和 session 混乱。
检查关键文件是否存在
确保每个 web 目录下有:
-
index.php(入口文件,不可缺失) -
.htaccess(高级模板自带,Apache 依赖它做基础重写) -
router.php(可选,但建议把urlManager配置抽离至此)
同时确认 backend/config/main.php 和 frontend/config/main.php 中的 urlManager 已启用:
'urlManager' => [
'enablePrettyUrl' => true,
'showScriptName' => false,
],

















