虚拟主机配置不生效的首要原因是httpd-vhosts.conf未被主配置加载,需取消httpd.conf中#include conf/extra/httpd-vhosts.conf的注释并重启apache;其次须配置hosts文件映射域名到127.0.0.1;documentroot路径须用正斜杠且权限设置正确;默认虚拟主机_default_:80会拦截请求,应删除或置底;最后务必用httpd -t验证语法。

虚拟主机配置不生效?先确认 httpd-vhosts.conf 已被主配置加载
很多问题根本不是写错了,而是 httpd-vhosts.conf 根本没被 Apache 读取。XAMPP 默认注释掉了 Include 这一行,必须手动启用。
- 打开
XAMPP\apache\conf\httpd.conf - 搜索
httpd-vhosts.conf,找到这行:#Include conf/extra/httpd-vhosts.conf - 删掉开头的
#取消注释 - 保存后务必重启 Apache(不是仅刷新页面)
常见错误现象:改完 httpd-vhosts.conf 后访问域名仍跳转到默认首页,或返回 403/404 —— 八成是这一步漏了。
本地域名解析必须配 hosts 文件,否则 DNS 找不到你的虚拟主机
Apache 能识别 ServerName,但浏览器发请求前得先把域名转成 127.0.0.1。Windows/macOS/Linux 都要手动加条记录。
- Windows 路径:
C:\Windows\System32\drivers\etc\hosts(需管理员权限编辑) - macOS/Linux 路径:
/etc/hosts(需sudo编辑) - 在末尾添加一行:
127.0.0.1 myproject.test(把myproject.test换成你设的ServerName) - 改完不用重启 Apache,但建议清空浏览器 DNS 缓存(
chrome://net-internals/#dns点 Clear host cache)
注意:不能用 .local 或纯数字域名(如 192.168.1.10),部分系统会拦截;推荐用 .test、.localhost 或 .dev(后者需 HTTPS)。
DocumentRoot 权限和路径写法稍有不慎就 403 Forbidden
Apache 对目录权限很敏感,尤其是 Windows 下反斜杠 \ 和路径末尾斜杠都可能引发问题。
-
DocumentRoot必须写绝对路径,且用正斜杠:"C:/xampp/htdocs/myproject"(不是C:\xampp\htdocs\myproject) - 对应
<directory></directory>块里路径必须完全一致,且结尾不加斜杠 - 确保该目录下有
index.html或index.php,否则可能 403 或 404 - 如果用子目录(比如
htdocs/myproject/public),<directory></directory>块里的AllowOverride All和Require all granted缺一不可
示例关键段落:
<virtualhost>
ServerName myproject.test
DocumentRoot "C:/xampp/htdocs/myproject"
<directory>
Require all granted
AllowOverride All
</directory></virtualhost>
多个虚拟主机共存时,_default_:80 会抢走所有未匹配的请求
XAMPP 自带的 httpd-vhosts.conf 开头有个 <virtualhost _default_:80></virtualhost> 块,它会捕获所有没被显式声明的域名请求,导致你新增的站点访问不了。
- 要么直接删掉整个
<virtualhost _default_:80></virtualhost>块(推荐) - 要么把它挪到文件最底部,并确保你自己的
<virtualhost></virtualhost>在它前面 - 检查所有
ServerName不重复,且没有拼写错误(比如www.myproject.test和myproject.test要分别定义或用ServerAlias)
最容易被忽略的是:改完配置后只执行了「Start」Apache,却没点「Config → Apache (httpd.conf)」验证语法是否正确——httpd -t 报错会直接让 Apache 启动失败,但 XAMPP 控制面板有时不弹明显提示。










