phpenv本身不管理域名,多站点需三者严格对齐:hosts映射、apache虚拟主机配置(每个域名单独块)、项目目录真实可读;缺一不可,且域名须逐字一致。

phpEnv 本身不管理域名或虚拟主机,它只是把 Apache/Nginx + PHP + MySQL 打包在一起的 Windows 集成环境。你看到的“站点域名管理”界面,本质是帮你往 httpd-vhosts.conf 里写 <virtualhost></virtualhost> 块——**不是批量模板,不是一键生效,更不自动处理 hosts 或权限**。多站点能跑起来,靠的是三件套对齐:系统 hosts、Apache 的 VirtualHost 配置、项目目录真实可读。
修改 Windows 的 hosts 文件是必须的第一步
没有这步,浏览器根本不知道 site1.test 应该找谁,直接 DNS 失败。
- 用管理员权限打开
C:WindowsSystem32driversetchosts - 在文件末尾追加纯文本行,格式严格:
127.0.0.1 site1.test(不能有http://,不能带端口,不能用 Tab,空格只能是单个 ASCII 空格) - 保存后立刻刷新 DNS 缓存:
ipconfig /flushdns(命令行需管理员权限) - 如果加了多个域名(比如
api.site1.test),每行一个,且大小写、www 前缀、点号结尾都必须和后续配置完全一致
httpd-vhosts.conf 里每个域名都要单独写一个 <virtualhost></virtualhost>
phpEnv 界面点“添加域名”,背后就是往这个文件里塞一块配置。但界面不会校验路径是否存在、不会检查斜杠方向、也不会帮你开目录权限。
- 确认
httpd.conf中这行没被注释:Include conf/extra/httpd-vhosts.conf -
DocumentRoot必须是绝对路径,推荐用正斜杠:"D:/www/site1/public"(反斜杠要双写:"D:\www\site1\public") -
ServerName必须和hosts里写的**逐字一致**,包括子域、大小写、有无www -
<directory></directory>块里必须有Require all granted,否则 403 - Windows 下注意 Apache 进程是否有权读取该目录(尤其 NTFS 权限限制时)
重启 Apache 后才生效,且错误日志比界面提示有用得多
phpEnv 面板点“重启 Apache”只是调用 httpd -k restart。如果配置写错,Apache 可能静默失败或只启动部分模块。
- 重启后访问
site1.test出现 404?先看ServerName和hosts是否拼错,再查DocumentRoot路径是否存在 - 出现 502?大概率是 PHP-FPM 没启,或
fastcgi_pass地址不对(但 phpEnv 默认用 mod_php,除非你手动切了) - 出 403?
<directory></directory>权限没设对,或 Windows 下目录 ACL 拒绝了SYSTEM或Administrators - 查真实原因:打开
logs/error.log,搜索最新几条[crit]或[error],比猜快得多
HTTP_HOST 是客户端传来的原始字符串,ServerName site1.TEST 和 hosts 里的 site1.test 不匹配,照样 404。别依赖“应该差不多”,三处域名必须复制粘贴级一致。php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











