phpEnv不支持真正的泛域名匹配,需手动修改httpd-vhosts.conf或Nginx server配置,添加ServerAlias .test.com或server_name test.com .test.com,并逐条配置hosts,或改用dnsmasq等本地DNS方案。

phpEnv 不支持真正的泛域名(wildcard)server_name 匹配
phpEnv 底层用的是 Apache 或 Nginx 封装,但它的图形界面(站点管理)只允许填**具体域名**,比如 test.com、api.test.com,不接受 *.test.com 这类通配符写法。你填进去也不会生效——它不会自动帮你生成 ServerName 或 server_name *.test.com 的配置。
想实现子域名自动映射,得绕过 phpEnv 界面手动改配置
phpEnv 的站点配置文件实际存放在 phpEnv\conf\apache\extra\httpd-vhosts.conf(Apache 模式)或 phpEnv\conf\nginx\vhost\ 下的某个 .conf 文件(Nginx 模式)。要支持类似 a.test.com、b.test.com 全部指向同一项目,你需要:
- 关闭 phpEnv 界面里的“自动配置”,避免它下次启动时覆盖你的修改
- 在
httpd-vhosts.conf里添加一个<VirtualHost *:80>块,ServerName写主域名(如test.com),再加一行ServerAlias *.test.com - 确保
DocumentRoot指向你的项目 public 目录,并在<Directory>中启用AllowOverride All - 如果是 Nginx 模式,在对应
server块中把server_name改成test.com *.test.com(注意空格分隔,不是正则) - 重启 phpEnv 服务(不是仅“重启 Apache/Nginx”,而是右键托盘图标 → “重新加载服务”)
hosts 文件无法配泛解析,必须逐条写
Windows 和 Linux 的 /etc/hosts **根本不支持通配符**。填 127.0.0.1 *.test.com 是无效的,系统直接忽略。开发阶段想测多个子域名,只能手动追加:
127.0.0.1 test.com 127.0.0.1 a.test.com 127.0.0.1 b.test.com 127.0.0.1 api.test.com
每次新增子域名都得改一次 hosts,保存后执行 ipconfig /flushdns(Windows)或 sudo dscacheutil -flushcache(macOS)刷新本地 DNS 缓存。
立即学习“PHP免费学习笔记(深入)”;
真正需要泛子域名的场景,建议换轻量方案
如果你的项目逻辑本身依赖子域名识别(比如多租户 SaaS、用户二级域名博客),靠 phpEnv + hosts 维护成本高、不可扩展。更可行的做法是:
- 用
dnsmasq(macOS/Linux)或Acrylic DNS Proxy(Windows)搭建本地 DNS 服务,把*.test.com全部解析到127.0.0.1 - 用
mkcert配合nginx自签泛域名证书(*.test.com),避免浏览器报 SSL 错误 - php 代码里通过
$_SERVER['HTTP_HOST']动态提取子域名,而不是依赖 Web 服务器做路径分发
phpEnv 的定位是快速启停本地环境,不是生产级多租户网关。泛域名这种需求,已经超出它设计边界了。



















