phpEnv 本身不管理域名绑定,多域名访问需三者严格一致:系统 hosts 文件映射、Web 服务器虚拟主机配置(Apache 的 ServerName 与 DocumentRoot)、浏览器访问域名,缺一或不一致即导致 404/502。

phpEnv 本身不处理域名解析,所有本地多域名访问都依赖系统 hosts 文件 + Web 服务器(Apache/Nginx)虚拟主机配置。你改的不是 PHP,而是操作系统和 Web 服务的路由规则。
修改 Windows/macOS/Linux 的 hosts 文件是必须的第一步
没有这一步,浏览器根本不知道 projecta.test 应该发给谁。所有后续配置都无效。
-
hosts文件路径固定:Windows 是C:WindowsSystem32driversetchosts,macOS/Linux 是/etc/hosts - 必须用管理员(Windows)或 root(macOS/Linux)权限打开编辑器,否则保存失败
- 每行格式严格为:
127.0.0.1 projecta.test(IP 和域名之间用空格或 Tab,不能用中文标点) - 加完后不要重启电脑,但建议执行
ipconfig /flushdns(Windows)或sudo dscacheutil -flushcache(macOS)清 DNS 缓存 - 避免写错拼写、多加空格、混用全角字符——这类错误会导致整个域名无法解析,且无明确报错
Apache 下必须启用并正确配置 httpd-vhosts.conf
phpEnv 默认可能没启用虚拟主机模块,ServerName 和 DocumentRoot 不匹配就会 404 或 502。
- 确认
httpd.conf中这行未被注释:Include conf/extra/httpd-vhosts.conf - 每个
<VirtualHost *:80>块里,ServerName必须和hosts里写的域名**完全一致**(包括大小写、有无 www、是否带 .test) -
DocumentRoot路径要用正斜杠/或双反斜杠\,单反斜杠在 Apache 配置中会出错 -
<Directory>块里必须包含Require all granted(Apache 2.4+),旧版的Allow from all会直接拒绝访问 - 改完配置后必须重启 Apache,仅刷新页面没用
用 phpEnv 图形界面配多域名时,hosts 文件仍需手动补全
phpEnv 的“站点域名管理”功能会自动生成 httpd-vhosts.conf 条目,但它**不会自动往系统 hosts 文件里写记录**。
立即学习“PHP免费学习笔记(深入)”;
- 你在 phpEnv 界面添加了
a.test和b.test,它只改了 Apache 配置 - 你还得自己打开
hosts文件,手动追加两行:127.0.0.1 a.test和127.0.0.1 b.test - 部分版本的 phpEnv 会附带一个“打开 hosts”按钮,但点击后只是打开文件,不会自动写入内容
- 如果用 phpEnv 启用了 HTTPS,记得在
hosts里也映射对应域名,并确认 Apache 的 SSL 虚拟主机监听的是*:443,且证书路径有效
最容易被忽略的是三者一致性:浏览器输的域名、hosts 里写的域名、Apache ServerName 写的域名,三个字符串必须一字不差。少个点、多个空格、大小写不同,都会导致请求进错虚拟主机甚至直接 404 —— 而日志里往往只显示 “client denied by server configuration”,根本看不出是域名不匹配。



















