phpStudy可通过Apache虚拟主机+hosts映射+PHP动态路由实现近似泛域名解析;需配置ServerAlias *.test、批量添加hosts记录,并在index.php中解析HTTP_HOST分发请求,或启用mod_vhost_alias模块实现自动目录映射。

phpStudy 本身不直接支持标准的“泛域名解析”(如 *.test 自动匹配任意子域名),但可以通过手动配置 Apache 虚拟主机 + hosts 文件 + 少量规则,实现**近似泛域名效果**,适用于本地多子项目快速访问(例如 a.test、b.test、api.test 全指向同一目录或按规则路由)。关键在于绕过 DNS,用本地控制实现灵活映射。
一、基础准备:启用虚拟主机与统一域名根
确保 Apache 已启用虚拟主机功能:
- 打开 phpStudy 面板 → 点击【Apache 配置】→ 【httpd-vhosts.conf】
- 确认文件开头有
Include conf/extra/httpd-vhosts.conf且未被注释(即前面没有#) - 在
httpd-vhosts.conf底部添加一个通配型虚拟主机配置:
<VirtualHost *:80>
ServerName test
ServerAlias *.test
DocumentRoot "D:/phpStudy/WWW/test-root"
<Directory "D:/phpStudy/WWW/test-root">
Options Indexes FollowSymLinks
AllowOverride All
Require all granted
</Directory>
</VirtualHost>
注意:ServerAlias *.test 是 Apache 支持的通配语法,但仅对本地 hosts 解析生效,不走公网 DNS。
二、hosts 文件批量映射(模拟泛解析)
Windows 的 hosts 文件不支持通配符,但可一次性添加常用子域名,避免每次新增都改配置:
立即学习“PHP免费学习笔记(深入)”;
- 用记事本(需管理员权限)打开:
C:\Windows\System32\drivers\etc\hosts - 在末尾追加多行,例如:
127.0.0.1 a.test 127.0.0.1 b.test 127.0.0.1 api.test 127.0.0.1 admin.test 127.0.0.1 *.test
⚠️ 注意:最后一行 127.0.0.1 *.test 实际无效(hosts 不识别 *),但前几行已覆盖高频子域;若需临时新增,只需加一行即可,无需重启 Apache。
三、PHP 层动态识别子域名(真正实现“泛”逻辑)
将所有 *.test 请求统一指向同一入口(如 index.php),再由 PHP 解析 $_SERVER['HTTP_HOST'] 决定行为:
- 在
D:/phpStudy/WWW/test-root/index.php中写入示例逻辑:
<?php
$host = $_SERVER['HTTP_HOST'];
list($subdomain) = explode('.', $host, 2);
switch ($subdomain) {
case 'a': include 'projects/a/index.php'; break;
case 'b': include 'projects/b/app.php'; break;
case 'api': include 'api/router.php'; break;
default: echo "Welcome to test root"; break;
}
?>
这样,访问 a.test、b.test、api.test 都走同一个虚拟主机,但由 PHP 分发到不同子项目,达到“泛域名路由”效果。
四、可选增强:自动创建子域名站点(适合固定结构)
如果每个子域名对应一个独立目录(如 a.test → /WWW/a),可用 Apache 的 mod_vhost_alias 模块实现真泛解析:
- 在
httpd-vhosts.conf中启用模块:LoadModule vhost_alias_module modules/mod_vhost_alias.so - 添加以下配置(替代前面的
VirtualHost):
<VirtualHost *:80>
ServerName test
ServerAlias *.test
VirtualDocumentRoot "D:/phpStudy/WWW/%1"
<Directory "D:/phpStudy/WWW/*">
Options Indexes FollowSymLinks
AllowOverride All
Require all granted
</Directory>
</VirtualHost>
此时访问 a.test 自动指向 D:/phpStudy/WWW/a,demo.test 指向 D:/phpStudy/WWW/demo —— 无需为每个子域单独配 VirtualHost。



















