必须同步修改hosts文件和Apache虚拟主机配置:在C:\Windows\System32\drivers\etc\hosts中添加“127.0.0.1 myapp.test”,并在httpd-vhosts.conf中配置对应VirtualHost块,二者缺一不可,且修改后需完全重启Apache并执行ipconfig /flushdns。

Apache中配置虚拟主机绑定自定义域名
Windows本地开发时,用 localhost 或 127.0.0.1 访问项目不够直观,绑定如 myapp.test 这类域名更贴近真实部署场景,也方便测试 Cookie、CORS 和 HTTPS 重定向逻辑。
关键在于两步同步生效:修改系统 hosts 文件 + 配置 Apache 的 httpd-vhosts.conf。漏掉任一环节都会导致“域名无法解析”或“404/500 错误”。
- 在
C:\Windows\System32\drivers\etc\hosts末尾追加一行:127.0.0.1 myapp.test(无需重启,但部分杀毒软件会拦截保存,建议用管理员权限打开记事本) - 确保 Apache 已启用虚拟主机模块:检查
httpd.conf中Include conf/extra/httpd-vhosts.conf这行未被注释 - 编辑
conf/extra/httpd-vhosts.conf,添加如下最小化配置:
<virtualhost>
ServerName myapp.test
DocumentRoot "D:/www/myapp"
<directory>
Require all granted
</directory></virtualhost>
注意路径用正斜杠,DocumentRoot 必须是绝对路径,且目录需真实存在;Require all granted 是 Apache 2.4+ 的权限写法,旧版用 Allow from all 会报错。
WampServer图形界面下快速启用域名绑定
如果你用的是 WampServer(推荐新手),它封装了 Apache 配置,但默认不自动加载 httpd-vhosts.conf,需要手动触发。
操作路径很直接:点击系统托盘 WampServer 图标 → Apache → httpd-vhosts.conf,编辑后保存,再左键图标 → Restart All Services。
- WampServer 自带的
httpd-vhosts.conf示例里有localhost的占位配置,务必删掉或注释掉它,否则新域名可能被覆盖或返回默认首页 - 它默认监听
*:80,若你装了 Skype 或 IIS,端口可能被占——此时要么关掉冲突服务,要么在httpd.conf中把Listen 80改成Listen 8080,然后用myapp.test:8080访问 - WampServer 的菜单里没有“刷新 DNS 缓存”选项,改完 hosts 后可执行
ipconfig /flushdns命令确保生效
PHP项目中识别当前绑定的域名
很多框架或路由逻辑依赖 $_SERVER['HTTP_HOST'] 或 $_SERVER['SERVER_NAME'] 判断环境,但在虚拟主机配置下二者行为不同,容易踩坑。
-
$_SERVER['HTTP_HOST']来自 HTTP 请求头,反映浏览器实际访问的域名(如myapp.test),但可被伪造,不适用于安全校验 -
$_SERVER['SERVER_NAME']来自 Apache 的ServerName指令,更可靠,但需确保httpd-vhosts.conf中明确写了ServerName myapp.test,否则它可能回退为localhost - 调试时可用
var_dump($_SERVER)快速确认哪一项是你期望的值,避免在本地和线上因配置差异导致路由错乱
绑定多个域名指向同一项目或不同子目录
一个常见需求是:用 admin.myapp.test 访问后台,api.myapp.test 走 API 目录。Apache 支持通配符和多 ServerAlias,但要注意优先级。
- 单项目多域名:在同一个
块内加ServerAlias admin.myapp.test api.myapp.test,所有请求都进同一DocumentRoot - 多项目隔离:必须用多个独立
块,每个指定唯一ServerName和对应DocumentRoot;顺序无关,Apache 按ServerName精确匹配 - 别用
*.myapp.test通配符做泛域名——Windows hosts 不支持通配符解析,只能逐条添加;真要泛解析得配本地 DNS 服务(如 Acrylic DNS),远超本地开发必要程度
真正容易被忽略的是:每次改完 httpd-vhosts.conf 或 hosts,Apache 必须完全重启(不是“重新载入配置”),否则改动不生效;而浏览器缓存的 DNS 结果有时比系统缓存更顽固,强制刷新(Ctrl+F5)或换隐身窗口验证最稳妥。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











