phpenv仅负责PHP版本切换,不管理hosts或虚拟主机;本地域名需系统hosts文件与Apache/Nginx配合配置,常见打不开原因包括Web服务未监听域名、DocumentRoot路径错误(如未指向框架public目录)、浏览器未加http://协议头。

phpenv 本身不处理 hosts 文件,也不管理虚拟主机 —— 它只是 PHP 版本切换工具。你要配本地域名,得靠系统 hosts + Web 服务器(Apache/Nginx)配合,phpenv 只负责确保你用的 PHP 版本对得上项目需求。
为什么改了 hosts 还打不开 tp6.test 或 wp.test
90% 的问题不是 hosts 写错了,而是中间断在以下三处:
- Web 服务根本没监听
tp6.test:Apache 的httpd-vhosts.conf或 Nginx 的server_name没配,或者配了但没 reload - 项目入口路径不对:
DocumentRoot指向了项目根目录而非public/(ThinkPHP/ Laravel 等框架必须指向public) - 浏览器输的是
tp6.test而不是http://tp6.test—— 少了协议头,现代浏览器会直接跳去搜索引擎搜这个词
Windows 下用 phpenv 时怎么安全改 hosts
phpenv 不动 hosts,但你得手动改,且必须绕过权限陷阱:
- 别双击打开
hosts文件 —— Windows 记事本默认无管理员权限,保存必失败 - 正确做法:右键「记事本」→「以管理员身份运行」→ 「文件 → 打开」→ 地址栏粘贴
%SystemRoot%\System32\drivers\etc→ 选中hosts→ 修改后「另存为」,编码选ANSI(不是 UTF-8),否则 Apache 可能拒绝加载 - 加的行必须是纯文本格式:
127.0.0.1 tp6.test,不能有中文空格、全角符号、末尾多余空格
macOS/Linux 下改完 hosts 必须 flush DNS 缓存
改完 /etc/hosts 不等于立刻生效,系统和浏览器都缓着旧记录:
立即学习“PHP免费学习笔记(深入)”;
- macOS:终端执行
sudo dscacheutil -flushcache; sudo killall -HUP mDNSResponder - Linux(Ubuntu/CentOS):多数情况只需
sudo systemd-resolve --flush-caches或重启systemd-resolved - 验证是否生效:终端跑
ping -c 1 tp6.test,输出 IP 是127.0.0.1才算过第一关
phpenv 切换 PHP 版本后,为什么虚拟主机突然 500
不是 hosts 的锅,是 PHP 模块或配置没跟上:
- Apache 的
LoadModule php_module路径可能还指向上一版 PHP 的php8.dll(Win)或libphp.so(macOS/Linux),要同步更新 - phpenv 切换后,
php --ini显示的配置文件路径变了,但 Apache 加载的仍是旧php.ini,得手动确认httpd.conf里PHPIniDir指向当前版本的 conf 目录 - 常见报错
PHP Parse error: syntax error, unexpected '?' in ...就是 Apache 在用 PHP 7.2 跑写了 null 合并操作符(??)的代码 —— 检查phpinfo()页面顶部显示的版本号
真正容易被忽略的点:改完 hosts 和 vhost 后,你以为万事大吉,其实 Apache/Nginx 日志(error_log)里早写了 Permission denied: AH00035: access to / denied (filesystem path '/xxx/public') because search permissions are missing on a component of the path —— 这说明目录权限没放开,不是域名问题,是系统级访问控制卡住了。



















