phpenv不支持二级域名图形化配置,需手动修改apache的httpd-vhosts.conf添加独立virtualhost块,并同步配置hosts文件映射到127.0.0.1;还需启用mod_rewrite、清理dns缓存、注意http_host提取与大小写处理。

phpEnv 本身不处理二级域名,它只是 Windows 下的 PHP 运行环境集成包(含 Apache、MySQL、PHP),真正起作用的是它内置的 Apache 配置。你不能靠改 phpEnv 的图形界面或某按钮“开启二级域名”,必须手动改 Apache 的 httpd-vhosts.conf 和 DNS 模拟(hosts 文件)。
Apache 虚拟主机配置必须独立写 server 块
phpEnv 默认只配了 localhost,新增二级域名如 api.test.com 或 admin.test.com,必须在 phpEnv\Apache\conf\extra\httpd-vhosts.conf 里追加完整 <virtualhost></virtualhost> 块:
- 每个二级域名都要一个独立的
<virtualhost></virtualhost>,不能共用一个块再靠ServerAlias堆砌,否则$_SERVER['HTTP_HOST']可能拿不准当前是哪个域名 -
DocumentRoot必须指向实际目录,比如"D:/phpEnv/www/api",路径结尾不要漏双引号,Windows 下路径含空格时尤其关键 -
ServerName写纯域名,如api.test.com;ServerAlias可选,比如加www.api.test.com - 务必保留
Require all granted(Apache 2.4+ 语法),缺了会导致 403 Forbidden
hosts 文件是本地测试唯一可行的 DNS 替代方案
你没法让公网 DNS 解析到本机 127.0.0.1,所以必须改系统 C:\Windows\System32\drivers\etc\hosts:
- 追加一行:
127.0.0.1 api.test.com,多个域名写在同一行用空格隔开,如127.0.0.1 api.test.com admin.test.com - 改完不用重启 phpEnv,但要以管理员身份运行命令提示符,执行
ipconfig /flushdns清除本地 DNS 缓存 - 浏览器访问前,先
ping api.test.com确认返回 127.0.0.1,否则 Apache 根本收不到请求
PHP 层识别域名时注意端口和大小写
Apache 把请求转给 PHP 后,$_SERVER['HTTP_HOST'] 是最可靠来源,但它可能带端口(如 api.test.com:8080)或大写字符(虽然少见):
- 用
parse_url('http://' . $_SERVER['HTTP_HOST'], PHP_URL_HOST)安全提取纯域名,比explode('.', ...)更健壮 - 比较域名时统一转小写:
strtolower($_SERVER['HTTP_HOST']) === 'api.test.com' - 别依赖
$_SERVER['SERVER_NAME'],它来自 Apache 配置里的ServerName,不是用户真实请求的 Host 头,容易误判 - 如果启用了 https 重定向,记得在
httpd-vhosts.conf里额外配一个:443的<virtualhost></virtualhost>块并指定 SSL 证书路径,否则 HTTPS 访问会失败
最容易被忽略的是:phpEnv 的 Apache 默认没开 mod_rewrite,如果你打算用 .htaccess 做二级域名路由(比如泛解析),得手动在 httpd.conf 里取消 #LoadModule rewrite_module modules/mod_rewrite.so 的注释,并确保对应目录的 AllowOverride All 已启用——这点不检查,.htaccess 里的规则永远不生效。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











