导读:本期聚焦于小伙伴创作的《XAMPP配置虚拟域名不生效怎么办?重启Apache后设置为何丢失》,敬请观看详情。不少人改完XAMPP的虚拟主机文件,浏览器输入自定义域名却一直跳到默认页,更奇怪的是重启Apache后原先写的配置就像没存在过。问题通常出在三个地方:一是只改了httpd-vhosts.conf却没在httpd.conf里打开虚拟主机包含项;二是Windows的hosts文件没写或写了被权限回滚;三是改错配置文件,例如动了非当前Apache版本的目录。理清XAMPP里配置加载顺序,先开Include指令,再写vhost块,最后同步hosts,就能让虚拟域名稳定生效且重启不丢。

在本地用XAMPP做PHP开发时,配置虚拟域名可以让我们用类似 www.mysite.local 的地址访问项目,比 localhost/project 更贴近真实环境。但很多人在设置后会遇到两种典型状况:浏览器访问虚拟域名无效,或者每次重启Apache服务后之前写的虚拟主机配置就像被清空了一样。这些问题并不是XAMPP本身的缺陷,而是配置链路中有环节被遗漏或写错位置。

XAMPP配置虚拟域名不生效怎么办?重启Apache后设置为何丢失

一、XAMPP虚拟域名生效的完整链路

XAMPP里Apache要识别一个虚拟域名,依赖一条从系统到Apache内部的传递链。首先是操作系统的 hosts 文件把域名指向本机IP,接着Apache主配置 httpd.conf 必须启用虚拟主机支持,最后在额外配置文件 httpd-vhosts.conf 中声明具体的域名与目录映射。只要其中一环断开,现象就是域名打不开,或者因为主配置没加载vhost文件,重启后看似设置丢失。

以Windows系统为例,hosts文件路径为 C:WindowsSystem32driversetchosts。我们需要用管理员权限编辑它,将自定义域名解析到 127.0.0.1。这一步如果没做,浏览器会直接走公网DNS,自然找不到本地服务。而在XAMPP控制面板中,Apache的配置文件实际位于 xamppapacheconfhttpd.conf,虚拟主机扩展文件则在 xamppapacheconfextrahttpd-vhosts.conf。

1.1 hosts文件配置示例

下面是一段标准的hosts写法,注意IP与域名之间用空格或制表符隔开,不要写端口:

127.0.0.1   www.mysite.local
127.0.0.1   test.mysite.local

保存后可在命令行执行 ping www.mysite.local 验证是否解析到本机。如果ping不通,说明hosts未生效,需检查文件权限及是否含有隐藏的.txt后缀。

1.2 主配置启用虚拟主机

打开 httpd.conf,搜索关键词 vhost,找到类似下面的行。若前面有井号注释,必须删掉才能加载虚拟主机文件:

# Virtual hosts
Include conf/extra/httpd-vhosts.conf

很多人重启Apache后设置失效,根本原因就是Include这一行被注释,Apache启动根本没读 httpd-vhosts.conf,你写在里面的内容当然就像丢失了。修改完主配置必须重启Apache,仅保存文件不会热加载。

二、httpd-vhosts.conf正确写法

在 httpd-vhosts.conf 中,每个虚拟域名对应一个 <VirtualHost> 块。新手常犯的错误是只写了一个项目,却忘了保留localhost的默认解析,导致XAMPP自带的管理页打不开。正确做法是先声明一个localhost的兜底块,再写自己的站点。

另外,Apache 2.4以上版本对目录权限指令做了调整,需用 Require all granted 替代旧的 Order 写法,否则会报403禁止访问。下面给出一个同时兼容localhost与自定义域名的完整示例:

<VirtualHost *:80>
    ServerName localhost
    DocumentRoot "C:/xampp/htdocs"
    <Directory "C:/xampp/htdocs">
        Require all granted
    </Directory>
</VirtualHost>

<VirtualHost *:80>
    ServerName www.mysite.local
    DocumentRoot "C:/xampp/htdocs/mysite"
    <Directory "C:/xampp/htdocs/mysite">
        Options Indexes FollowSymLinks
        AllowOverride All
        Require all granted
    </Directory>
</VirtualHost>

这里 ServerName 必须和hosts里的域名完全一致,DocumentRoot 使用正斜杠或转义反斜杠。AllowOverride All 是为了让项目里的 .htaccess 能生效,比如框架路由重写。如果目录权限没给够,页面会显示禁止访问而不是找不到。

2.1 为什么重启后配置像被还原

除了前面说的Include被注释,另一个隐蔽原因是XAMPP版本切换或重装。有些人机器上装了多个XAMPP,命令行重启的是A目录的Apache,而编辑器改的是B目录的 httpd-vhosts.conf,两边不是同一份文件。通过XAMPP控制面板的Config按钮打开的配置,才能保证改的就是运行中的实例。

还有一种情况是杀毒软件或系统还原把hosts恢复默认。可以把hosts文件设为只读(在确认内容正确后),或者把域名写进局域网的DNS工具里规避。只要hosts和Apache两侧都稳定,重启就不会丢失设置。

三、排错流程与验证手段

当虚拟域名不生效时,建议按下面顺序排查,避免盲目改文件:

  • 第一步:命令行 ping 域名,看是否回到 127.0.0.1。
  • 第二步:在XAMPP面板点Config打开 httpd.conf,确认Include vhosts行无注释。
  • 第三步:检查 httpd-vhosts.conf 中 ServerName 拼写及 DocumentRoot 路径是否存在。
  • 第四步:查看Apache错误日志 xamppapachelogserror.log,搜索域名关键字。

如果日志出现 AH00558 或 Could not reliably determine 的提示,一般不影响使用,只是没设 ServerName 全局项;若出现 AH01630 则是目录权限拒绝,需补 Require 指令。

3.1 用phpinfo确认加载文件

在 htdocs 下放一个临时php文件,输出配置路径,能确认Apache到底读了哪份配置:

<?php
phpinfo();
// 在页面搜索 "SERVER_CONFIG_FILE" 和 "HTTPD_ROOT"
// 可看到当前生效的配置文件绝对路径
?>

通过这个方法,你能直接看到 Include 实际指向的文件位置,从而判断自己编辑的是不是同一文件。确认路径一致后,再对照前面的写法修正,虚拟域名就能稳定生效且重启不丢。

四、常见误区总结

误区一是以为改完hosts就能访问,忽略了Apache侧还要声明虚拟主机。误区二是把 <VirtualHost> 写在 httpd.conf 末尾却忘了开 Include,导致重启不加载。误区三是用中文引号或全角空格写配置,Apache无法解析。

只要把握住系统解析、主配置开关、vhost声明这三层关系,XAMPP的虚拟域名配置就是一次性的工作,后续重启Apache都不会再失效。遇到异常时优先看日志,比反复重装环境更高效。

XAMPP虚拟域名Apache配置修改时间:2026-08-09 03:09:14

免责声明:​ 已尽一切努力确保本网站所含信息的准确性。网站内容多为原创整理与精心编撰,观点力求客观中立。本站旨在免费分享,内容仅供个人学习、研究或参考使用。若引用了第三方作品,版权归原作者所有。如内容涉及您的权益,请联系我们处理。
内容垂直聚焦
专注技术核心技术栏目,确保每篇文章深度聚焦于实用技能。从代码技巧到架构设计,为用户提供无干扰的纯技术知识沉淀,精准满足专业提升需求。
知识结构清晰
覆盖从开发到部署的全链路。AI、前端、编程、数据库、服务器、建站、系统层层递进,构建清晰学习路径,帮助用户系统化掌握开发与运维所需的核心技术。
深度技术解析
拒绝泛泛而谈,深入技术细节与实践难点。无论是数据库优化还是服务器配置,均结合真实场景与代码示例进行剖析,致力于提供可直接应用于工作的解决方案。
专业领域覆盖
精准对应开发生命周期。从前端界面到后端编程,从数据库操作到服务器运维,形成完整闭环,一站式满足全栈工程师和运维人员的技术需求。
即学即用高效
内容强调实操性,步骤清晰、代码完整。用户可根据教程直接复现和应用于自身项目,显著缩短从学习到实践的距离,快速解决开发中的具体问题。
持续更新保障
专注既定技术方向进行长期、稳定的内容输出。确保各栏目技术文章持续更新迭代,紧跟主流技术发展趋势,为用户提供经久不衰的学习价值。