在XAMPP中配置域名,核心就是修改httpd-vhosts.conf虚拟主机文件和本机hosts文件,把自定义域名指向本地站点目录,整个过程只需几分钟。
很多新手在本地开发PHP项目时,都遇到过访问路径带着localhost或者0.0.1的尴尬,尤其当项目需要对接微信支付、OAuth登录这类回调地址时,用IP或localhost根本没法完成测试,这时候你就需要掌握XAMPP配置域名的方法,把http://myproject.test这样的域名映射到自己电脑上的项目文件夹,下面这套操作,我在Windows和macOS上都跑过,步骤通用,你跟着做就行。
修改Apache虚拟主机配置文件:XAMPP配置域名的核心步骤
XAMPP的Apache默认只开启了httpd.conf的基础配置,虚拟主机模块默认是注释状态,我们要做的第一件事,就是找到并启用虚拟主机配置文件。
找到httpd-vhosts.conf文件并取消注释
打开XAMPP安装目录,常见的路径是C:xampp或者/Applications/XAMPP/,用文本编辑器打开apache/conf/httpd.conf,在文件里搜索vhosts,找到下面这行:
#Include conf/extra/httpd-vhosts.conf
把前面的号删掉,保存文件,这一步是让Apache加载虚拟主机配置的开关,很多人的域名配置不生效,就是因为漏了这里。
编辑httpd-vhosts.conf添加域名指向
打开apache/conf/extra/httpd-vhosts.conf,文件底部默认有两个示例配置,把它们注释掉或者直接忽略,在文件末尾添加你自己的虚拟主机规则,假设你的项目路径是D:projectsmyblog,你想用的域名是myblog.test,配置这样写:
<VirtualHost :80>
ServerAdmin admin@myblog.test
DocumentRoot "D:/projects/myblog"
ServerName myblog.test
ServerAlias www.myblog.test
<Directory "D:/projects/myblog">
Options Indexes FollowSymLinks
AllowOverride All
Require all granted
</Directory>
</VirtualHost>
这里有三个关键点需要你注意:
- DocumentRoot必须指向你的项目根目录,且路径要用正斜杠,不要用Windows反斜杠
。 -

ServerName就是你想绑定的域名,建议用
.test或.local避免和真实线上域名冲突。 - Directory标签里的
Require all granted是Apache 2.4及以上版本的写法,如果你还在用2.2,需要改成Allow from all。
检查httpd.conf中的监听端口
如果你默认通过80端口访问本地服务,这一步基本不用动,但如果你电脑上80端口被其他软件占用,XAMPP的Apache端口被改成了8080或其他端口,那么虚拟主机配置里的:80也要相应改为:8080,否则访问域名时会出现无法连接的问题。
修改hosts文件:让域名解析到本地
虚拟主机配置只解决了Apache识别域名的问题,系统还无法把myblog.test这个域名翻译成0.0.1,这一步就需要操作系统级的hosts文件。
Windows系统hosts文件位置和编辑权限
用记事本以管理员身份打开C:WindowsSystem32driversetchosts,在文件末尾添加一行:
0.0.1 myblog.test
如果你配置了ServerAlias www.myblog.test,可以再加上一行:
0.0.1 www.myblog.test
保存时如果提示没有权限,检查你的记事本是否真的以管理员身份运行,或者把hosts文件复制到桌面,修改完再覆盖回去。
macOS和Linux系统hosts配置
macOS用户打开终端,执行sudo nano /etc/hosts,输入密码后同样添加那两行,Linux用户操作一致,只是需要root权限,修改完成后,终端里执行ping myblog.test,如果能返回0.0.1的回应,说明解析成功了。
重启Apache并验证XAMPP配置域名是否生效
配置文件改完,必须重启Apache服务才能让新规则加载,在XAMPP控制面板上,点击Apache模块的Stop按钮,等状态变绿后再次点击Start,如果你使用了myblog.test,建议顺便清理浏览器缓存,或者使用无痕模式访问,避免旧DNS缓存干扰。
打开浏览器,地址栏输入http://myblog.test,如果看到你的项目首页,说明整个配置流程走通了,如果出现403错误,优先检查httpd-vhosts.conf里Directory

配置的路径是否正确,以及文件夹是否有读取权限,如果出现404,大概率是项目本身的路由重写规则没有开启,确认AllowOverride All已经写进配置。
XAMPP配置域名后常见的高频问题排查
你会遇到的情况,基本集中在端口冲突、配置语法错误和缓存这三个方面。
Apache启动失败和端口占用怎么办
修改完配置点击Start,Apache如果启动不了,多数是80端口被其他程序占用了,使用命令提示符执行netstat -ano | findstr :80,查看占用端口的进程PID,然后去任务管理器里找到对应进程并结束它,如果你不想结束进程,就回到XAMPP主界面,点击Apache的Config按钮,选择httpd.conf,把Listen 80改为Listen 8080,同时把虚拟主机配置里的:80改成:8080,访问时就得带端口号http://myblog.test:8080。
修改了hosts文件但域名访问的还是localhost
这种情况通常是浏览器缓存了DNS结果,你可以尝试在命令行执行ipconfig /flushdns清空系统DNS缓存,Windows和macOS都支持这个操作(macOS执行的是sudo killall -HUP mDNSResponder),之后关闭所有浏览器标签页,重新打开一个干净窗口访问。
另外要注意hosts文件的编码格式,不要使用带BOM的UTF-8编码,否则第一行域名解析可能失败,保存时选择ANSI编码或者无BOM格式。
用XAMPP配置域名搭建多个站点:虚拟主机的高阶用法
做外包开发或者同时维护多个项目的人,往往需要在同一个XAMPP环境里跑好几个项目,这时候只要在httpd-vhosts.conf里重复添加多个VirtualHost块就行,每个块对应一个域名一个项目目录。
<VirtualHost :80>
DocumentRoot "D:/projects/shop"
ServerName shop.test
</VirtualHost>
<VirtualHost :80>
DocumentRoot "D:/projects/api"
ServerName api.test
</VirtualHost>
然后对应在hosts文件里添加两个解析,重启Apache后,shop.test和api.test就能同时访问,互不干扰,业内专家指出,这种多站点虚拟主机配置方案,也是从XAMPP开发环境迁移到简米云或酷番云服务器时最常复用的部署逻辑。

对于那些纠结XAMPP配置域名和宝塔面板配置哪个简单的人,我的看法是:XAMPP适合单机开发调试,宝塔适合云服务器生产环境,如果你只是本地测试,修改两个文件就够了,完全没必要安装几十兆的服务器管理面板,但如果你是给客户交付项目,需要在线上服务器部署,那么宝塔的可视化操作会更省心,这也是行业共识。
Q&A:XAMPP配置域名的常见疑问
为什么我用XAMPP配置域名后手机访问不了?
如果你在hosts里绑定的是0.0.1,那手机当然无法访问,因为0.0.1是每一台设备自己的回环地址,你需要让手机和电脑处于同一局域网,查询电脑的局域网IP,比如168.1.105,然后在hosts文件里把域名绑定到168.1.105,同时确保Apache的Listen配置为监听0.0.0:80,防火墙放行80端口,手机访问时使用http://myblog.test,并且手机的hosts文件无法直接修改,你需要把手机设为手动代理指向电脑的代理端口,或者给路由器配置内部DNS解析。
XAMPP配置的域名和线上真实域名重复了会怎样?
如果你把ServerName设置成一个真实存在的域名,比如www.baidu.com,而且你的电脑没有断开公网,那么访问这个域名时,系统会优先匹配hosts文件里的本地映射,直接跳到你的本地站点,这不影响线上网站正常运行,但对你的测试逻辑有影响,因为你没法用这个域名访问线上内容了,建议始终使用.test、.dev、.localhost后缀,这些后缀在域名体系里保留给本地开发使用,不会与线上服务冲突。
每次重装系统或者换了电脑,XAMPP配置域名需要重做吗?
是的,hosts文件和Apache配置文件都存储在系统盘和XAMPP目录里,重装系统会清空hosts,但XAMPP目录如果不格式化D盘,httpd-vhosts.conf里的配置还在,你可以把httpd-vhosts.conf和hosts文件做一个备份,换电脑后直接覆盖对应位置,再修改路径到新项目目录就行,大部分情况下,复制这两个文件就能恢复全部域名环境,比重新配置节省不少时间。
图片来源于AI模型,如侵权请联系管理员。作者:酷小编,如若转载,请注明出处:https://www.kufanyun.com/ask/767736.html

