本质是网络隔离问题:apache默认仅监听127.0.0.1,需改为listen 0.0.0.0:80、require all granted,并放行主机防火墙tcp 80端口,虚拟机网络设为桥接模式,确保ip互通且php模块正确加载。

虚拟机里访问不到 localhost 的 PHP 站点,本质是网络隔离问题
Windows 7 主机上跑着 Apache + PHP,http://localhost 能打开,但 VMware 或 VirtualBox 里的 Win7/Win10 虚拟机浏览器输 http://192.168.x.x 就连不上——这不是 PHP 配错了,是 Apache 默认只监听 127.0.0.1,拒绝来自虚拟机的请求。
Apache 必须改 Listen 和 ServerName 才能被虚拟机访问
光改 httpd.conf 里的 Listen 80 不够。Windows 7 下 Apache 默认绑定到回环地址,需显式放开局域网接口:
- 把
Listen 80改成Listen 0.0.0.0:80或Listen *:80(推荐前者,语义明确) - 确认
ServerName设为localhost:80或留空;设成127.0.0.1:80会导致虚拟机访问时重定向失败 - 检查
<directory></directory>块内是否有Require local——必须改成Require all granted,否则 403 Forbidden
主机防火墙和虚拟机网络模式是两个关键拦路虎
即使 Apache 配对了,虚拟机仍连不上,大概率卡在这两处:
- Windows 7 主机防火墙默认阻止入站 80 端口:进「控制面板 → Windows 防火墙 → 高级设置 → 入站规则」,新建规则放行 TCP 80 端口(作用域选“任何计算机”)
- 虚拟机网络必须用「桥接模式(Bridged)」或「NAT 模式 + 端口转发」;用「仅主机模式(Host-Only)」的话,虚拟机压根拿不到和主机同网段的 IP,
ipconfig看到的是 192.168.56.x 这类私有段,和主机不在一个广播域 - 桥接模式下,在虚拟机里运行
ping 192.168.x.x(主机真实局域网 IP)必须通;不通就回头检查网卡驱动、VMware Network Adapter VMnet0 是否启用
PHP 文件在虚拟机访问时显示源码,说明没走 Apache 解析
浏览器打开 http://192.168.x.x/test.php 看到的是原始 <?php echo 'hi'; ?>,不是执行结果——这代表请求根本没进 Apache 的 PHP 处理流程,而是被当静态文件返回了。常见原因:
-
LoadModule php_module对应的 DLL 路径写错,或用了 NTS 版本(Apache 必须用 TS) -
AddHandler application/x-httpd-php .php这行漏了,或写成.PHP(大小写敏感) - 虚拟机访问时 URL 里带了端口(如
:8080),但 Apache 只监听 80,且没配NameVirtualHost *:8080
最稳的验证方式:在虚拟机里用 curl -v http://192.168.x.x/test.php 看响应头,如果 Content-Type: text/html 且 body 是 PHP 输出,说明解析成功;如果是 text/plain,就是 Apache 没加载 PHP 模块或 handler 没生效。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











