遇到wamp域名解析失败,先别急着重装绝大多数情况下,问题出在hosts文件和Apache虚拟主机配置没对应上,按顺序检查这两处即可解决。
第一步:判断是不是真正的“域名解析失败”
很多朋友一看到浏览器提示“无法访问此网站”或“DNS_PROBE_FINISHED_NXDOMAIN”,就默认是域名解析出了问题,其实在wamp环境下,本地域名解析失败和远程网站打不开是两回事。
打开Windows命令行(Win+R输入cmd),执行:
ping yourdomain.com
如果返回的是Ping request could not find host,说明你的电脑压根不认识这个域名,hosts文件没生效,如果ping通了但浏览器打不开,那问题多半在Apache配置或端口占用上,和域名解析无关。
另一种常见情况是:你用wamp访问phpMyAdmin正常,但换成自定义域名就白屏,这通常不是解析问题,而是虚拟主机配置里少了目录权限声明。
本地hosts文件怎么配置才算正确
找到hosts文件位置
Windows系统下,hosts文件位于:
C:WindowsSystem32driversetchosts
注意,这个文件没有扩展名,不要试图去找hosts.txt,很多人用记事本打开后另存为,结果保存成了hosts.txt.txt,导致配置完全没生效。
正确的书写格式
每个条目单独一行,格式是:
IP地址 + 空格 + 域名
举几个实际例子:
0.0.1 localhost 127.0.0.1 myproject.test 127.0.0.1 shop.local ::1 localhost
行业共识认为,用.test、.local这种专用顶级域做本地开发域名很稳妥,不会和线上真实域名冲突,将来上线时也容易全局搜索替换。
保存后立刻生效的3个步骤
- 关闭所有浏览器窗口(Chrome后台进程也要在任务管理器结束掉)
- 命令行执行
ipconfig /flushdns清空DNS缓存 - 重新打开浏览器访问
如果你改完hosts文件后发现
保存时提示“拒绝访问”或“没有权限”,这是因为Windows默认保护了系统目录,解决办法:
- 将hosts文件复制到桌面,改好后再复制回去覆盖
- 或右键记事本图标,选择“以管理员身份运行”,再打开文件编辑保存
最容易忽略的细节
- 域名末尾不要加斜杠和端口号,
http://myproject.test/写到hosts里时只要myproject.test - 每行行首不要有空格,注释用号
- 不要在同一行写两个域名,除非你清楚自己在做什么
改完hosts还没通?接着查Apache虚拟主机配置
很多时候hosts文件没问题,问题出在wamp的虚拟主机配置里压根没有这个域名对应的站点,Apache收到请求后找不到匹配的VirtualHost,就返回了默认页面或者报错。
开启必要模块
用wamp菜单打开Apache -> Apache modules,确保以下两项被勾选:
rewrite_modulevhost_alias_module
编辑httpd-vhosts.conf
点击wamp图标 -> Apache -> httpd-vhosts.conf,这是虚拟主机配置文件,一个最小可用的站点配置长这样:
<VirtualHost :80>
ServerAdmin admin@yourdomain.com
DocumentRoot "D:/www/myproject"
ServerName myproject.test
<Directory "D:/www/myproject">
Options Indexes FollowSymLinks
AllowOverride All
Require all granted
</Directory>
</VirtualHost>
注意DocumentRoot路径里的斜杠方向Apache在Windows下用正斜杠而不是反斜杠。
检查httpd.conf里的Include行
很多人修改完vhosts.conf,重启Apache后完全没变化,原因在于httpd.conf文件里这两行被注释掉了:
# Virtual hosts # Include conf/extra/httpd-vhosts.conf
需要把第二行的# Include改成Include,去掉注释符号,然后重启Apache,这也是wamp的新手开发者在配置本地虚拟主机过程中经常踩到的一个坑。
引入httpd.conf的必要改动
如果只是简单访问http://localhost,不需要改这一步,但要和自定义域名配合使用,需要确认httpd.conf里的DocumentRoot和<Directory>设置不干扰vhosts配置,具体做法:
- 打开
httpd.conf,搜索Listen 80,确认端口没被占用 - 搜索
ServerName,如果之前没配过,加上一行ServerName localhost:80
改完后通过wamp菜单或者直接wampmanager.exe重启所有服务,注意,重启Apache和重启电脑效果不同,只重启Apache更快,而且不影响系统里其他服务。
域名解析失败的几种例外场景
hosts文件被安全软件拦截
部分杀毒软件和电脑管家会监控hosts文件,拦截异常修改,你改完保存后,软件会弹窗询问是否允许,如果误点了“阻止”,文件内容会被还原,业内专家指出,这类软件冲突在国产安全软件中较为常见,遇到反复恢复的情况,可以先退出安全软件再修改。
域名带端口号导致的错觉
有朋友问“我配置完毕,为何访问http://myproject.test:8080报错”,原因很简单:hosts文件只做域名到IP的映射,它不关心端口号,端口是Apache的事,如果你用自定义端口启动Apache,检查httpd.conf里Listen 8080,同时虚拟主机配置里的<VirtualHost :8080>也要改成对应的端口。
重启Apache后依然404
这时用wamp内置工具验证配置是否正确:
- 点击wamp图标 ->
Apache->Test Port 80 - 确认端口未被IIS或Nginx占用,如果有其他Web服务器在运行,需要先停掉,否则域名解析成功但请求被别的程序接收
配置过程中常见疑问和排查办法
为什么我的localhost能打开,自定义域名就是不行
这种情况大概率是虚拟主机配置文件里只有默认的localhost配置,没有新增你的站点条目,打开httpd-vhosts.conf检查一下,看是否有
ServerName myproject.test这样的条目,没有就手动添加上去,同时确认DocumentRoot指向的目录真实存在。
hosts文件怎么配置多个域名指向同一个项目
直接在同一行后面续写,或者换行再写一遍同样的IP即可:
0.0.1 project.test admin.project.test api.project.test
也可以在后续行继续添加,多个域名指向同一项目时,虚拟主机里要把所有域名都写进ServerAlias:
ServerName project.test ServerAlias admin.project.test api.project.test
wamp的在线/离线状态对域名解析有没有影响
wamp图标有绿色和橙色两种状态,橙色说明有服务没启动,先恢复成绿色,再去排查hosts文件,如果图标一直是橙色,点击Apache -> Service -> Install Service重新安装服务,再用管理员身份启动。
wamp域名解析失败不是玄学,本质上就是两个文件的事:hosts文件把域名指到127.0.0.1,Apache虚拟主机配置告诉服务器收到这个域名的请求后去哪里找文件,两者缺一不可,顺序上先改hosts再改vhosts,改完重启Apache和浏览器,绝大多数问题都在三步之内解决。
wamp域名解析失败常见问题解答
改完hosts文件后ping不通,清DNS缓存也没用,还有什么办法?
确认hosts文件是否被保存成了.txt格式,打开文件夹选项,勾选“显示文件扩展名”检查实际文件名,另外有些Windows版本对C:WindowsSystem32driversetc目录做了额外的受保护设置,用命令行notepad C:WindowsSystem32driversetchosts以管理员身份打开编辑。
localhost能访问但自定义域名的web项目始终403,如何排查?
403错误意味着Apache已经接收到了请求,但权限不允许访问目录,检查httpd-vhosts.conf中对应虚拟主机的<Directory>块里是否有Require all granted,以及DocumentRoot指向的实际物理路径有没有授予用户读取权限,确认Apache进程对该目录有遍历权限后重启服务。
首发原创文章,作者:王坚,如若转载,请注明出处:https://idctop.com/article/624003.html


![一个视频解决hosts写入失败/手动写hosts/hosts文档空白[steamcommunity302常见问题]](https://i0.hdslb.com/bfs/archive/af2ab3530a39ce2f79f259d1c1090a3623481217.jpg)


