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

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

XAMPP配置虚拟域名不生效?重启后设置丢失?一文彻底解决

在本地使用XAMPP进行PHP开发时,配置虚拟域名是一项非常实用的技能。它让你可以用类似www.mysite.pcppp.com这样的地址访问项目,而不是每次都输入冗长的localhost/project。虚拟域名不仅更接近真实线上环境,还能方便地模拟多站点开发。然而,很多人在配置过程中会遇到两大典型问题:一是浏览器访问虚拟域名时毫无反应,二是每次重启Apache服务后,之前辛辛苦苦写的虚拟主机配置就像被清空了一样。这些问题并非XAMPP本身存在缺陷,而是配置链路中的某个环节被遗漏或写错了位置。本文将从原理到实操,一步步带你彻底解决这些烦恼。


一、虚拟域名生效的完整链路:三个环节缺一不可

要让Apache识别一个虚拟域名,需要经过一条从操作系统到Apache内部的传递链。这条链由三个关键环节组成:

  1. 系统hosts文件:将自定义域名指向本机IP(通常是127.0.0.1)。
  2. Apache主配置文件httpd.conf:必须启用虚拟主机模块,并加载额外的虚拟主机配置文件。
  3. 虚拟主机配置文件httpd-vhosts.conf:在其中声明具体的域名与项目目录的映射关系。

只要其中任何一环断开,就会出现域名打不开的情况。而所谓的“重启后设置丢失”,往往是因为主配置没有正确加载虚拟主机文件,或者你修改的配置文件并非Apache实际读取的那一份。

1.1 第一环:系统hosts文件——域名指向本机

hosts文件是操作系统的本地DNS解析文件,它的优先级高于公共DNS服务器。当你在浏览器输入一个域名时,系统会先查看hosts文件中有没有对应的记录。如果有,就直接使用该记录指向的IP地址;如果没有,才会去公网查询。

因此,想让自定义域名(如www.mysite.pcppp.com)在本地生效,第一步就是在hosts文件中添加一行:

127.0.0.1   www.mysite.pcppp.com

注意:IP地址和域名之间用空格或制表符隔开,不要写端口号,也不要带http://前缀。保存后,你可以在命令行执行ping www.mysite.pcppp.com来验证是否解析到了127.0.0.1。如果ping不通,说明hosts文件没有生效,需要检查文件权限、是否以管理员身份保存,以及文件是否被错误地加了.txt后缀。

1.2 第二环:Apache主配置——开启虚拟主机模块

XAMPP中的Apache主配置文件位于xampp/apache/conf/httpd.conf。为了让Apache读取虚拟主机配置,必须取消注释下面这行:

Include conf/extra/httpd-vhosts.conf

很多人在重启Apache后发现虚拟主机设置“丢失”,根本原因就是这一行前面有井号(#)注释,导致Apache启动时根本没有加载httpd-vhosts.conf文件。你写在里面的内容自然也就不会被应用。修改完主配置后,必须重启Apache服务才能生效,仅仅保存文件并不会热加载。

1.3 第三环:虚拟主机配置文件——声明域名与目录映射

虚拟主机配置文件位于xampp/apache/conf/extra/httpd-vhosts.conf。在这里,你需要为每个虚拟域名定义一个<VirtualHost>块。新手常犯的错误是只写了自定义站点的配置,却忘了保留localhost的默认解析,导致XAMPP自带的管理页面(如phpMyAdmin)无法访问。正确做法是先声明一个localhost的兜底块,再添加自己的站点。

此外,Apache 2.4及以上版本对目录权限指令做了调整,必须使用Require all granted替代旧版的Order allow,deny,否则会返回403禁止访问错误。


二、具体配置步骤详解(以Windows为例)

2.1 修改hosts文件

  1. 以管理员身份运行记事本(右键点击记事本图标,选择“以管理员身份运行”)。
  2. 在记事本中点击“文件”→“打开”,导航到C:\Windows\System32\drivers\etc,注意右下角文件类型要选“所有文件”,才能看到hosts文件。
  3. 在文件末尾添加以下内容(每行一个域名):
127.0.0.1   localhost
127.0.0.1   www.mysite.pcppp.com
127.0.0.1   admin.mysite.pcppp.com
  1. 保存文件。如果提示无法保存,请确认你确实是以管理员身份运行的记事本。
  2. 打开命令提示符(CMD),输入ipconfig /flushdns刷新DNS缓存,使修改立即生效。

2.2 修改httpd.conf启用Include

  1. 打开XAMPP控制面板,点击Apache右侧的“Config”按钮,选择“Apache (httpd.conf)”。
  2. 在打开的配置文件中,按下Ctrl+F搜索vhost,找到如下行:
# Virtual hosts
#Include conf/extra/httpd-vhosts.conf
  1. 删除第二行前面的井号(#),使其变为:
Include conf/extra/httpd-vhosts.conf
  1. 保存文件。注意:一定要通过XAMPP控制面板的Config按钮打开,这样才能确保你编辑的是当前运行实例所使用的配置文件。如果直接去文件管理器里找,可能会误改到其他版本的XAMPP。

2.3 编写httpd-vhosts.conf的正确姿势

  1. 同样通过XAMPP控制面板的Config按钮,选择“Apache (httpd-vhosts.conf)”打开该文件。
  2. 清空原有内容(或者在其基础上添加),写入以下完整配置:
<VirtualHost *:80>
    ServerName localhost
    DocumentRoot "C:/xampp/htdocs"
    <Directory "C:/xampp/htdocs">
        Require all granted
    </Directory>
</VirtualHost>

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

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

注意事项:

  • ServerName必须和hosts文件中的域名完全一致,包括大小写(虽然域名不区分大小写,但建议保持一致)。
  • DocumentRoot路径使用正斜杠/或双反斜杠\\,推荐统一用正斜杠,避免转义问题。
  • AllowOverride All允许项目中的.htaccess文件生效,很多PHP框架(如ThinkPHP、Laravel)依赖此功能实现URL重写。
  • 每个虚拟主机块都必须有<Directory>指令并加上Require all granted,否则会报403错误。
  1. 保存文件后,重启Apache服务。此时在浏览器中输入http://www.mysite.pcppp.com,应该就能看到你的项目了。

三、为什么重启Apache后设置会丢失?

3.1 最常见的原因:Include行被注释

正如前面所说,httpd.conf中的Include conf/extra/httpd-vhosts.conf这一行如果被注释掉了,Apache启动时就不会加载虚拟主机配置文件。即使你在httpd-vhosts.conf中写得再好,也等于白费功夫。很多人在第一次配置成功后,后来因为某些原因(比如更新XAMPP版本、误操作)导致这一行又被加上了注释,于是重启后就发现设置“消失”了。

解决方法很简单:再次打开httpd.conf,确认该行没有被注释。如果被注释了,去掉井号并重启Apache即可。

3.2 其他隐蔽因素:多版本XAMPP、杀毒软件干扰

有些开发者的电脑上安装了多个版本的XAMPP,或者在不同目录下解压了多个XAMPP副本。当你通过命令行或桌面快捷方式启动Apache时,可能启动的是A目录下的程序,但你编辑的却是B目录下的配置文件。两者不一致,自然会出现“改了没生效”的现象。

解决办法:始终通过XAMPP控制面板的Config按钮来打开配置文件,因为控制面板会自动关联当前正在运行的那个实例。你也可以在控制面板上查看Apache的安装路径,确保编辑的是同一个目录下的文件。

另外,某些杀毒软件或系统还原功能可能会自动重置hosts文件。为了防止这种情况,可以在确认hosts内容正确后,右键点击hosts文件,选择“属性”,勾选“只读”。这样即使有程序试图修改,也会被阻止。


四、排错流程与验证手段

当虚拟域名不生效时,不要盲目乱改文件,按照下面的顺序排查,效率最高。

4.1 分步排查法

第一步:检查hosts解析

打开命令提示符,输入ping www.mysite.pcppp.com。如果返回的是127.0.0.1,说明hosts生效;如果返回其他IP或提示找不到主机,说明hosts配置有问题,请检查文件格式和权限。

第二步:确认httpd.conf中的Include未被注释

通过XAMPP控制面板打开httpd.conf,搜索vhost,确保Include conf/extra/httpd-vhosts.conf前面没有井号。

第三步:检查httpd-vhosts.conf的语法和路径

仔细核对ServerName是否拼写正确,DocumentRoot指向的目录是否存在。如果目录不存在,Apache会报错但不会告诉你具体原因,只会显示空白页。

第四步:查看Apache错误日志

日志文件位于xampp/apache/logs/error.log。打开它,搜索你的域名或相关错误关键词。常见的错误信息有:

  • AH01630: client denied by server configuration:目录权限不足,需要补上Require all granted
  • AH00558: Could not reliably determine the server's fully qualified domain name:这个警告一般不影响使用,可以忽略。
  • File does not exist:DocumentRoot路径不对或项目文件缺失。

4.2 使用phpinfo确认配置文件路径

htdocs目录下新建一个info.php文件,内容如下:

<?php
phpinfo();

然后通过浏览器访问http://localhost/info.php。在页面中搜索SERVER_CONFIG_FILEHTTPD_ROOT,可以看到Apache实际读取的主配置文件路径和根目录。对比一下你刚才编辑的文件路径是否一致,如果不一致,说明你改错了地方。

4.3 验证虚拟主机是否加载

httpd-vhosts.conf中添加一个临时虚拟主机,例如:

<VirtualHost *:80>
    ServerName test123.pcppp.com
    DocumentRoot "C:/xampp/htdocs"
    <Directory "C:/xampp/htdocs">
        Require all granted
    </Directory>
</VirtualHost>

然后在hosts中添加127.0.0.1 test123.pcppp.com,重启Apache后访问http://test123.pcppp.com。如果能打开,说明整个链路是通的,问题出在你的具体配置细节上。如果打不开,说明链路中有断点,需要回头检查。


五、常见误区总结与最佳实践

5.1 三大常见误区

  • 误区一:只改hosts,不改Apache配置。认为改完hosts就能直接访问,但实际上Apache并不知道这个域名对应哪个目录,所以会显示无法访问。
  • 误区二:把虚拟主机配置直接写在httpd.conf末尾。虽然技术上可行,但破坏了配置文件的模块化结构,而且容易在升级XAMPP时被覆盖。正确做法是写在httpd-vhosts.conf中,并通过Include加载。
  • 误区三:使用中文引号或全角空格。Apache配置文件对符号非常敏感,必须使用英文半角字符。一个全角空格就可能导致整段配置失效。

5.2 最佳实践建议

  1. 备份原始配置文件:在修改任何配置之前,先将httpd.confhttpd-vhosts.conf复制一份备份,以便出错时快速恢复。
  2. 每次修改后重启Apache:修改完配置文件后,务必在XAMPP控制面板中停止Apache再启动,而不是仅点击“重启”按钮(有时重启不完全)。
  3. 使用有意义的域名后缀:推荐使用.local.dev.test作为本地开发域名的后缀,避免与真实互联网域名冲突。例如www.mysite.pcppp.com中的pcppp.com只是一个示例,实际使用时最好换成你自己控制的域名或专用后缀。
  4. 保持hosts文件整洁:定期清理不再使用的域名记录,避免过多条目影响解析速度。
  5. 理解错误日志的价值:遇到问题时,第一时间查看Apache错误日志,它能给出最直接的线索,远比盲目猜测有效。

只要把握住“系统解析→主配置开关→vhost声明”这三层关系,XAMPP的虚拟域名配置就是一次性的工作,后续重启Apache也不会再失效。希望本文能帮助你彻底告别“配置不生效”和“设置丢失”的困扰,让本地开发更加顺畅高效。

XAMPP虚拟域名Apache配置修改时间:2026-08-20 23:51:37

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