phpEnv通过自动写入hosts和httpd-vhosts.conf实现本地域名访问:添加站点时追加127.0.0.1 域名,并配置VirtualHost指向指定目录(需填至public层),同时确保httpd.conf启用Include及rewrite模块,刷新DNS后生效。

phpEnv 本身不直接“配置域名”,而是通过一键写入 hosts + 自动生成 Apache 虚拟主机配置来实现本地域名访问。你只要在 phpEnv 界面点几下,它就帮你把两件事都做了——但前提是 Apache 正在运行、且你没手动破坏过它的配置结构。
phpEnv 添加站点时自动写入 hosts 的行为
当你点击「网站 → 添加」,填入域名(如 test.local)和项目路径后,phpEnv 会做两件事:
- 在
C:\Windows\System32\drivers\etc\hosts文件末尾追加一行:127.0.0.1 test.local - 在 Apache 的
conf/extra/httpd-vhosts.conf中插入一个<VirtualHost *:80>块,指向你指定的目录 - 这个过程**不会覆盖已有配置**,但也不会校验你是否已手动改过
httpd-vhosts.conf的语法
常见失败现象:ping test.local 通,但浏览器打不开——大概率是 Apache 没读到新配置,或 httpd.conf 里 Include conf/extra/httpd-vhosts.conf 这行被注释了(前面有 #)。
为什么 www.tp.com 能访问,但自定义域名 403 或 404
phpEnv 默认创建的站点,DocumentRoot 指向的是你填的目录根,但 ThinkPHP/Laravel 等框架要求入口必须是 public/ 子目录。如果你填的路径是 E:\workspace\tp8,而实际可访问文件在 E:\workspace\tp8\public,Apache 就会拒绝服务(403)或找不到 index.php(404)。
立即学习“PHP免费学习笔记(深入)”;
- 解决办法:添加站点时,「目录」字段**必须填到
public层**,比如E:\workspace\tp8\public - 如果已经添加了错误路径,删掉重来最稳妥;强行改
httpd-vhosts.conf容易漏掉<Directory>权限块 - 确认
<Directory>块里有AllowOverride All和Require all granted,否则.htaccess不生效,URL 重写(如 ThinkPHP 的路由)会挂
修改 hosts 后浏览器仍不认域名?别只关浏览器
Windows 下改完 hosts,很多人只关浏览器重开,但 DNS 缓存还在系统里。直接导致 ping 得通、curl http://test.local 也通,唯独 Chrome/Firefox 打不开。
- 执行命令刷新本地 DNS:
ipconfig /flushdns - 如果用的是 Chrome,还要清空 HSTS 缓存:地址栏输入
chrome://net-internals/#hsts→ 删除域名 - phpEnv 自带的「浏览此网站」按钮有时会走旧缓存,建议手动输
http://test.local测试 - HTTPS 域名(如
https://shop.test)必须额外配 SSL 证书,phpEnv 不自动处理;用mkcert生成后,要手动把.pem和.key文件复制进 phpEnv 配置界面指定的证书目录(它默认不创建该目录)
真正容易被忽略的点是:phpEnv 的虚拟主机配置依赖 Apache 的模块加载状态。如果你装过其他环境(XAMPP/WAMP),又手动改过 httpd.conf,很可能 mod_rewrite 或 mod_headers 被禁用了——这时候哪怕域名解析和路径都对,ThinkPHP 的 URL 路由也会 404。检查方式很简单:httpd -M | findstr rewrite(Windows)看输出里有没有 rewrite_module。



















