在hosts文件里把自定义域名指向127.0.0.1,在Web服务器里创建对应虚拟主机并指向项目目录,最后重启服务并刷新本地DNS缓存,整个过程免费,不需要购买真实域名。
你正在本地开发一个商城项目,目录结构是 D:/www/shop/public,浏览器里只能输入 localhost/shop/public 才能访问,路径又长又容易出错,ajax请求还可能因为根目录不对导致404,这时候配置一个虚拟域名,www.shop.test,直接输入就能打开项目首页,URL干净,开发环境也更接近线上真实环境。
配置虚拟域名的底层逻辑:浏览器先查hosts再查DNS
虚拟域名的本质,是让浏览器把一个自定义域名解析到本机IP 0.0.1,然后由本机Web服务器根据域名找到对应项目目录。
行业共识认为,主流操作系统在解析域名时,会优先读取本机hosts文件,只要hosts里存在记录,浏览器就不会再向公网DNS发起查询。
为什么hosts优先级高于公网DNS
因为hosts文件是操作系统网络栈的第一道解析入口,你输入 www.shop.test 后,系统先打开hosts文件查找,发现 0.0.1 www.shop.test 这一行,直接返回本机地址,公网DNS根本收不到这个请求,www.shop.test 这个域名也完全不需要在互联网上注册。
配置虚拟域名和真实域名的差别
真实域名需要购买、实名认证、备案,解析后全球可访问,虚拟域名只在你自己的电脑上生效,换一台设备访问同一个域名,如果没有修改那台设备的hosts,是打不开的,它只服务于本地开发和测试场景。
本地虚拟域名怎么设置:先改hosts还是先建虚拟主机
推荐顺序是先建虚拟主机,再改hosts,因为先改hosts会让域名指向本机,但Web服务器还没配置对应站点,浏览器访问时会看到默认站点或403错误,先建好虚拟主机再改hosts,改完就能直接测试。
操作前需要准备的三样东西
- 一个本地Web环境:Apache、Nginx、phpstudy、宝塔面板任选其一
- 一个项目目录:
D:/www/shop - 系统管理员权限:修改hosts文件需要管理员身份
hosts文件具体位置
- Windows:
C:WindowsSystem32driversetchosts - macOS/Linux:
/etc/hosts
win10配置虚拟域名,从编辑hosts到Apache虚拟主机
Windows 10用户最常遇到的问题是hosts文件保存不了,或者保存后不生效,下面按完整链路走一遍。
第一步:用管理员身份打开hosts文件
点击开始菜单,搜索“记事本”,右键选择“以管理员身份运行”,在记事本里点击“文件-打开”,把路径粘贴到文件名输入框:
C:WindowsSystem32driversetchosts
右下角文件类型从“文本文档”切换为“所有文件”,否则看不到hosts文件。
第二步:添加域名解析记录
在hosts文件末尾另起一行,输入:
0.0.1 www.shop.test
可以同时绑定多个域名:
0.0.1 www.shop.test
127.0.0.1 api.shop.test
127.0.0.1 admin.shop.test
保存文件,如果提示没有权限,说明记事本没有以管理员身份运行。
第三步:配置Apache虚拟主机
找到Apache安装目录下的 conf/extra/httpd-vhosts.conf 文件,用编辑器打开,在文件末尾添加:
<VirtualHost :80>
ServerName www.shop.test
DocumentRoot "D:/www/shop/public"
<Directory "D:/www/shop/public">
Options Indexes FollowSymLinks
AllowOverride All
Require all granted
</Directory>
</VirtualHost>
保存后,还要确认Apache主配置文件 httpd.conf 里这一行前面的 已去掉:
Include conf/extra/httpd-vhosts.conf
如果没有打开这个Include,虚拟主机配置永远不生效。
第四步:重启Apache并刷新DNS
Windows命令行执行:
httpd -k restart
ipconfig /flushdns
浏览器访问 http://www.shop.test,能打开项目首页就说明配置成功。
Nginx配置写法
如果你用的是Nginx,在 nginx.conf 的 http 块里找到 include vhost/.conf; 这类引入语句,然后新建一个 www.shop.test.conf 文件,写入:
server {
listen 80;
server_name www.shop.test;
root D:/www/shop/public;
index index.html index.php;
location / {
try_files $uri $uri/ /index.php?$query_string;
}
}
保存后执行 nginx -s reload。
phpstudy配置虚拟域名,免手动改hosts的操作路径
phpstudy(小皮面板)在国内开发者中使用频率较高,因为它把hosts修改和虚拟主机创建打包成了一个操作。
创建网站
打开phpstudy面板,点击左侧“网站”,再点“创建网站”,在弹窗里填写:
- 域名:
www.shop.test - 根目录:选择
D:/www/shop/public - PHP版本:按项目需求选择
点击确认后,phpstudy会尝试自动把 0.0.1 www.shop.test 写入系统hosts文件。
检查hosts是否自动写入
如果面板提示hosts写入失败,手动打开 C:WindowsSystem32driversetchosts,按前面说的方法加上解析记录即可。
phpstudy中的常见报错
创建完网站后访问域名,如果出现“找不到站点”或默认页面,先确认Apache/Nginx是否已经启动,再检查面板里的网站状态是否显示为“运行中”,phpstudy内置的Web服务有时会因为端口冲突(比如80端口被其他程序占用)导致虚拟域名无法访问,把监听端口改成8080后,域名需要带上端口访问,http://www.shop.test:8080。
虚拟域名和本地hosts区别,用一张表说清
很多刚接触本地开发的人会把这两个概念混在一起,虚拟域名是Web服务器里的站点配置,本地hosts是操作系统里的解析文件,两者需要配合,但不是一回事。
| 对比项 | 虚拟域名 | 本地hosts |
| 本质 | Web服务器中的站点名称 | 系统域名解析文件 |
| 作用 | 匹配域名并关联项目目录 | 把域名指向指定IP |
| 配置位置 | Apache/Nginx/面板的虚拟主机配置 | 系统hosts文件 |
| 是否独立生效 | 必须配合hosts才能被本机访问 | 可以单独存在,指向任意IP |
| 典型格式 | ServerName www.shop.test | 127.0.0.1 www.shop.test |
简单理解:hosts负责把域名翻译成本机地址,虚拟主机负责在本机内部把域名和项目目录对应起来,少了任何一个,浏览器都无法正确打开项目。
配置虚拟域名后无法访问?按这个排查顺序走
不要一看到打不开就重装环境,按下面顺序查,多数问题能在五分钟内定位。
第一步:ping域名确认解析
命令行执行:
ping www.shop.test
如果返回的IP不是 0.0.1,说明hosts没有生效,Windows执行 ipconfig /flushdns 刷新DNS缓存,macOS执行
sudo dscacheutil -flushcache。
如果返回的IP正确,继续下一步。
第二步:检查Web服务器是否监听80端口
Windows执行:
netstat -ano | findstr :80
如果没有任何输出,说明Apache或Nginx没启动,或者监听了其他端口,启动服务后再测试。
第三步:检查防火墙和安全软件
部分安全软件会拦截本地80端口的访问,临时关闭安全软件测试一下,如果能访问,再把Web服务加入白名单。
第四步:检查虚拟主机配置是否被加载
Apache需要确认 httpd.conf 里的 Include conf/extra/httpd-vhosts.conf 没有被注释,Nginx需要确认主配置里的 include vhost/.conf; 路径与你的虚拟主机文件位置一致。
第五步:查看错误日志
Apache日志路径通常位于 logs/error.log,Nginx日志位于 logs/error.log,日志里会记录DocumentRoot目录不存在、权限不足等具体错误原因,直接根据日志提示修复。
配置虚拟域名常见问题Q&A
配置虚拟域名需要购买域名吗?
不需要,虚拟域名只在本地生效,不经过公网DNS解析,使用hosts文件把自定义域名指向 0.0.1 即可,整个过程零成本,真正需要购买域名的是部署到公网服务器的场景。
为什么配置虚拟域名后局域网设备访问不了?
因为hosts文件只在当前电脑上生效,想让同一局域网内的其他设备访问,需要在对方电脑的hosts文件里把你电脑的局域网IP和虚拟域名绑定,
168.1.100 www.shop.test
同时Web服务器需要监听 0.0.0:80,而不是只监听 0.0.1。
虚拟域名和本地hosts区别是什么?
虚拟域名是配置在Web服务器里的站点名称,本地hosts是操作系统里的解析文件,浏览器访问虚拟域名时,先查hosts,找到 0.0.1 后把请求交给本机Web服务器,Web服务器再根据虚拟主机里的 ServerName 匹配到对应项目目录,虚拟域名通过hosts才能解析到本地IP,两者配合使用,不能互相替代。
把“hosts解析”和“虚拟主机绑定”这两条链路理解透,配置虚拟域名就是改两处文件加一次重启的事,多操作几遍,路径和命令会形成肌肉记忆,后续换项目只是改一下域名和目录而已。
首发原创文章,作者:王坚,如若转载,请注明出处:https://idctop.com/article/640979.html




