PHP本地多域名绑定需hosts映射、Web服务器虚拟主机配置及PHP代码识别HTTP_HOST;三者域名必须完全一致,否则导致502/404。

phpEnv 本身不处理域名绑定,它只管理 PHP 版本和运行时环境;真正实现多域名访问的是你实际使用的 Web 服务器(Apache 或 Nginx),而 phpEnv 只是把它们“包起来”启动。所以配置多域名,关键在 Web 服务器层,不是 phpenv 命令能解决的。
hosts 文件必须先加好对应域名
这是整个流程的前提,否则浏览器根本不会把请求发到本地。Windows 路径是 C:\Windows\System32\drivers\etc\hosts,macOS/Linux 是 /etc/hosts。用管理员/root 权限打开,在末尾追加:
127.0.0.1 sitea.test 127.0.0.1 siteb.test 127.0.0.1 api.sitea.test
注意三点:
- 每行一个域名,不能带
http://或端口号 - 不要混用空格和 tab,只用空格分隔 IP 和域名
- 改完后 Windows 运行
ipconfig /flushdns,macOS 运行sudo dscacheutil -flushcache
Apache 用户:改 httpd-vhosts.conf 添加多个 <VirtualHost>
phpEnv 默认使用 Apache,配置文件通常在 phpEnv\apache\conf\extra\httpd-vhosts.conf。确保主配置中已启用该文件(检查 httpd.conf 里这行没被注释):Include conf/extra/httpd-vhosts.conf。
立即学习“PHP免费学习笔记(深入)”;
在 httpd-vhosts.conf 末尾添加类似这样的块:
<VirtualHost *:80>
ServerName sitea.test
DocumentRoot "D:/www/sitea"
<Directory "D:/www/sitea">
AllowOverride All
Require all granted
</Directory>
</VirtualHost>
<VirtualHost *:80>
ServerName siteb.test
DocumentRoot "D:/www/siteb"
<Directory "D:/www/siteb">
AllowOverride All
Require all granted
</Directory>
</VirtualHost>
常见坑:
-
DocumentRoot路径里的反斜杠要写成正斜杠或双反斜杠,否则 Apache 启动失败 - 如果 phpEnv 控制面板里 Apache 显示“启动失败”,大概率是这里语法错误或路径不存在
- 改完必须点 phpEnv 界面的「重启 Apache」,不是只刷新页面
Nginx 用户:在 nginx.conf 的 http 块里加 server 块
phpEnv 的 Nginx 配置主文件一般在 phpEnv\nginx\conf\nginx.conf。找到 http { ... } 区域,在里面插入多个 server 块:
server {
listen 80;
server_name sitea.test;
root "D:/www/sitea";
index index.php;
location / {
try_files $uri $uri/ /index.php?$args;
}
location ~ \.php$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
}
}
要点提醒:
- 每个
server_name必须和hosts里写的完全一致(包括大小写、有无 www) -
fastcgi_pass地址要和 phpEnv 实际启动的 PHP-FPM 监听地址匹配(默认是127.0.0.1:9000,可在 phpEnv 设置里确认) - 改完后执行
nginx -t测试语法(在 phpEnv 的 nginx/bin 目录下运行),再点控制面板「重启 Nginx」
最常被忽略的一点:phpEnv 界面里「网站管理」功能只是快捷添加单个站点,它不会自动帮你写多域名的 VirtualHost 或 server 块——那些都得你手动编辑配置文件。别指望点几下就搞定,本质还是 Web 服务器配置活儿。



















