phpEnv默认不启用Apache虚拟主机功能,需先在httpd.conf中取消注释Include conf/extra/httpd-vhosts.conf和LoadModule vhost_alias_module modules/mod_vhost_alias.so,再配置ServerName、DocumentRoot及Require all granted权限,最后以管理员身份修改hosts并执行httpd -t验证后重启。

phpEnv 默认不启用 Apache 虚拟主机功能,直接编辑 httpd-vhosts.conf 不会生效 —— 因为 httpd.conf 里对应的 Include 行被注释了,且 mod_vhost_alias.so 模块也未加载。
确认 phpEnv 的 Apache 配置路径
phpEnv 的 Apache 配置文件通常位于:C:\phpEnv\Apache\conf\httpd.conf(Windows)或 /usr/local/phpenv/apache/conf/httpd.conf(macOS/Linux)。不要凭经验去 extra/ 目录下找 httpd-vhosts.conf 就动手改——先验证该文件是否真实存在、是否被主配置引用。
- 打开
httpd.conf,搜索httpd-vhosts.conf,确认这行是否被注释:#Include conf/extra/httpd-vhosts.conf - 再搜索
vhost_alias,确认这行是否启用:LoadModule vhost_alias_module modules/mod_vhost_alias.so(若前面有#,需去掉) - phpEnv 有些版本把虚拟主机配置合并到了
httpd.conf底部,而不是单独的httpd-vhosts.conf;此时应直接在httpd.conf末尾添加<VirtualHost>块
编辑 vhost 配置时必须写的三要素
每个 <VirtualHost *:80> 块里,ServerName、DocumentRoot 和 <Directory> 权限声明缺一不可,漏掉任一个都可能导致 403 或 404。
-
ServerName必须是完整域名(如site1.test),不能写localhost/site1或带路径 -
DocumentRoot路径用正斜杠/,即使在 Windows 上也要写成"D:/www/site1",而非"D:\www\site1" -
<Directory "D:/www/site1">内必须包含Require all granted(Apache 2.4+);若残留旧版Order allow,deny会直接拒绝访问
为什么改了 vhost 还是 403 或无法解析域名
常见原因不是配置写错了,而是系统层或服务层没同步到位:
立即学习“PHP免费学习笔记(深入)”;
- hosts 文件没以管理员权限保存:Windows 下
C:\Windows\System32\drivers\etc\hosts修改后必须右键记事本 → “以管理员身份运行”再保存,否则修改无效 - Apache 没重载配置:phpEnv 界面点击“重启 Apache”有时只是软重启,建议手动执行命令:
httpd -t检查语法,再httpd -k restart强制重载 - 端口冲突未察觉:phpEnv 可能默认监听
:8080而非:80,此时<VirtualHost *:80>块永远不匹配;应统一用<VirtualHost *:8080>并在浏览器访问http://site1.test:8080
SSL 多站点要额外注意证书路径格式
phpEnv 自带的 OpenSSL 支持有限,SSLCertificateFile 等路径不能含中文、空格或特殊符号,且必须是绝对路径(不能用 ~ 或环境变量)。
- 证书文件建议放在
C:\phpEnv\certs\site1\这类纯英文无空格路径下 -
SSLCertificateFile值写成:"C:/phpEnv/certs/site1/site1.crt"(注意双引号 + 正斜杠) - 如果启用多个 HTTPS 站点,Apache 2.4.8+ 才支持 SNI,旧版 phpEnv 若基于 Apache 2.2,则无法在同一 IP 上跑多个 SSL 站点
最容易被忽略的是:phpEnv 的 Apache 启动脚本可能绕过你手动改的 httpd.conf,而读取它自己生成的临时配置。改完务必执行 httpd -t 验证,别只信界面“重启成功”。



















