xampp默认仅监听80端口,运行多个yii2应用需手动配置apache多端口监听(如listen 8001/8002)、启用httpd-vhosts.conf、为每个端口设置独立virtualhost指向对应web/目录,并在yii2中显式配置urlmanager baseurl及cookievalidationkey以避免路径冲突、403错误或会话混淆。

直接上结论:XAMPP 默认只监听 80 端口,要跑多个 Yii2 应用(比如 frontend/backend 分开、或多个项目并行),必须手动配置 Apache 多端口监听 + 虚拟主机,不能靠改 web/index.php 路径硬凑。
Apache 必须启用多端口监听(httpd.conf)
默认 XAMPP 的 httpd.conf 只有 Listen 80,加新端口不是“复制一行”就完事——漏掉 ServerName 或协议绑定会直接导致 Apache 启动失败。
- 打开
C: mpppacheconfhttpd.conf,在已有Listen 80下方新增:Listen 8001 Listen 8002
- 必须同步添加
NameVirtualHost(Apache 2.4+ 实际已废弃该指令,但 XAMPP 8.x 仍带旧版兼容逻辑,不加可能触发 403):NameVirtualHost *:8001 NameVirtualHost *:8002
- 确认
httpd-vhosts.conf已被加载(检查httpd.conf中是否有Include etc/extra/httpd-vhosts.conf且未被注释)
每个端口对应独立虚拟主机(httpd-vhosts.conf)
不能把多个 DocumentRoot 指向同一个 Yii2 项目的 web/ 目录——cookie、session、asset 发布路径会冲突,runtime 目录权限也会乱。
- 为每个端口建独立配置块,例如:
<virtualhost> DocumentRoot "C:/xampp/htdocs/myapp/frontend/web" ServerName localhost <directory> RewriteEngine on RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . index.php Require all granted </directory></virtualhost><virtualhost> DocumentRoot "C:/xampp/htdocs/myapp/backend/web" ServerName localhost <directory> RewriteEngine on RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . index.php Require all granted </directory></virtualhost> -
DocumentRoot必须精确到web/子目录,不能是项目根目录,否则config/和runtime/会被 Web 直接访问 - Windows 路径用正斜杠
/或双反斜杠\,单反斜杠会导致 Apache 解析失败
Yii2 自身需适配多端口(web.php 和 index.php)
Yii2 默认从 $_SERVER['HTTP_HOST'] 推导 base URL,但多端口下浏览器地址栏显示 localhost:8001,而框架生成的 URL 可能仍带 :80 或丢端口,导致 CSS/JS 404 或表单提交错路。
- 在
frontend/config/main.php和backend/config/main.php的components中显式设urlManager:'urlManager' => [ 'baseUrl' => 'http://localhost:8001', // 或用动态写法(推荐) 'baseUrl' => sprintf('http://%s:%s', $_SERVER['HTTP_HOST'], $_SERVER['SERVER_PORT']), ], - 确保
web/index.php开头的defined('YII_DEBUG')前没有输出(包括 BOM),否则 header() 会失败,登录跳转后白屏 - 如果用
cookieValidationKey,不同端口建议用不同值(避免跨端口 session 混淆),可按端口生成:'cookieValidationKey' => md5('frontend_8001'),
最易被忽略的是 runtime 和 assets 目录权限——XAMPP 的 Apache 进程(httpd.exe)以 Windows 当前用户身份运行,但若你用管理员权限启动 XAMPP 控制面板,而项目目录在 OneDrive 或受控文件夹里,Apache 可能无权写入。直接在资源管理器里右键目录 → 属性 → 安全 → 编辑 → 给 Users 组加“修改”权限,比反复查 error.log 快得多。











