phpStudy多站点配置必须启用httpd-vhosts.conf,否则仅认默认DocumentRoot;需取消httpd.conf中#Include conf/extra/httpd-vhosts.conf的注释,重启Apache,并确保ServerName、hosts映射与目录权限三者严格一致。

phpStudy 多站点必须启用虚拟主机配置
不开启 httpd-vhosts.conf,哪怕你在面板里加了十个站点,Apache 也只会认默认的 DocumentRoot(通常是 D:/phpStudy/WWW),其余站点完全不生效。
关键操作是打开 D:\phpStudy\PHPTutorial\Apache\conf\httpd.conf,找到这行:
#Include conf/extra/httpd-vhosts.conf
删掉开头的 #,保存。这一步漏掉,后面所有配置都白做。
- Windows 路径注意反斜杠转义或直接用正斜杠(
D:/www/site1更安全) - 如果用小皮面板 v8.x,界面里“网站”→“添加网站”会自动写入配置并启用该文件,但老版本或手动修改后仍需确认此开关是否打开
- 改完
httpd.conf必须重启 Apache,仅点“重新加载配置”不够
每个站点要绑定唯一域名 + 独立目录 + 显式端口
多站点不是靠目录区分,而是靠 ServerName 和监听端口共同决定请求路由。同一端口下不能有两个 ServerName 相同的 <VirtualHost> 块,否则后加载的会覆盖前一个。
立即学习“PHP免费学习笔记(深入)”;
典型正确配置(httpd-vhosts.conf 中):
<VirtualHost *:80>
DocumentRoot "D:/www/admin"
ServerName admin.local
<Directory "D:/www/admin">
Require all granted
AllowOverride All
</Directory>
</VirtualHost>
<p><VirtualHost *:80>
DocumentRoot "D:/www/api"
ServerName api.local
<Directory "D:/www/api">
Require all granted
AllowOverride All
</Directory>
</VirtualHost>-
ServerName必须和hosts文件里写的完全一致(区分大小写、无空格) - 若想用不同端口(如
:8080),除了在<VirtualHost>中写明,还必须在httpd.conf里加Listen 8080 - 目录路径不要带中文或空格,否则 Apache 可能拒绝启动
hosts 文件必须手动追加映射,且不能有重复 IP 行
Windows 的 C:\Windows\System32\drivers\etc\hosts 是唯一能让浏览器把 admin.local 解析到 127.0.0.1 的地方。phpStudy 面板里的“打开 hosts”按钮只是快捷方式,实际编辑仍需管理员权限保存。
常见错误写法:
# 错误:同一 IP 多次出现,系统只认第一个 127.0.0.1 admin.local 127.0.0.1 api.local 127.0.0.1 admin.local ← 这行会导致前面那行失效
- 每行只能有一个域名,多个域名需分行写
- 行首不能有空格,末尾不能有多余空格或不可见字符(建议用 Notepad++ 或 VS Code 编辑)
- 改完 hosts 后,CMD 执行
ipconfig /flushdns,否则 DNS 缓存可能让新域名无法解析
PHP 版本必须按站点单独指定,不能全局混用
ThinkPHP8 多应用、Laravel 11、WordPress 6.8 对 PHP 版本要求差异极大。phpStudy 小皮面板支持 per-site PHP 切换,但这个设置只对 Apache 模块模式(php_module)生效;若你启用了 FastCGI(Nginx 或 Apache 的 mod_fcgid),该设置会被忽略,必须改 httpd-vhosts.conf 里对应站点的 SetHandler 或使用 ProxyPass 转发到指定 PHP-FPM 端口。
- 面板中“网站”→选中站点→“设置”→“PHP版本”下拉选择,适用于绝大多数 Apache + mod_php 场景
- 如果站点报错
PHP Parse error: syntax error, unexpected token "=",大概率是用了 PHP 8.0+ 语法但实际运行在 PHP 7.4 - 检查当前生效版本最可靠方式:在站点根目录放一个
info.php,内容为<?php phpinfo(); ?>,访问看顶部显示的版本号
配置真正跑通的关键不在步骤数量,而在三处必须同步:httpd-vhosts.conf 里的 ServerName、hosts 文件里的对应行、以及每个站点目录下能正常响应的脚本(比如 index.php 输出 phpversion())。少一处,就卡在 404 或 500。



















