![为何我的 hosts 文件不起作用?](https://linux22.com/image/512893/%E4%B8%BA%E4%BD%95%E6%88%91%E7%9A%84%20hosts%20%E6%96%87%E4%BB%B6%E4%B8%8D%E8%B5%B7%E4%BD%9C%E7%94%A8%EF%BC%9F.png)
我一直使用 hosts 文件进行本地网站开发,但最近它停止工作了。除了 localhost 解析之外,没有其他条目。
我已经简化了测试,所以现在它只包含
127.0.0.1 localhost
::1 localhost
127.0.0.1 test.dev
localhost 响应 ping,但 test.dev 没有响应。
- 文件名
hosts
无扩展名 - 它没有尾随空格
- 它保存在 C:\WINDOWS\System32\drivers\etc 中,与 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\DataBasePath 的值匹配
- 奇怪的是,尽管 UAC 已打开,但我可以在没有管理员权限的情况下编辑、删除和保存文件
- 未使用代理,PC 未连接网络进行测试
- 停止 DNS 客户端服务似乎可以在几分钟内解决问题,test.dev 可以短暂解决问题,但不能再解决问题。
- 唯一的防火墙是 Windows 的
- 机器已重新启动。
还有什么我应该尝试的吗?
答案1
避免对同一 IP 地址使用多个条目 — 在同一行上写入多个主机名(第一个是规范名称)。例如:
127.0.0.1 localhost localhost.localdomain test.dev
::1 localhost localhost.localdomain test.dev
如果仍然遇到问题,请尝试(从命令提示符):
net stop dnscache
答案2
尝试这个:
# 127.0.0.1 localhost
::1 localhost
::1 test.dev 127.0.0.1 test.dev
答案3
您是否尝试过删除该行:
::1 localhost
或添加以下行:
::1 test.dev
更新
过去,如果 hosts 文件在地址和名称之间包含空格而不是制表符,就会出现问题。我最近没有进行足够的检查,不知道是否仍然如此。您可以尝试确保分隔符是制表符而不是空格。
答案4
我可以通过不使用 .dev 作为 TLD 来解决我的问题(顶级域名)。
显然,Google 拥有 .dev,并已设置 HSTS(HTTP 严格传输安全)以确保对任何 .dev 网站的所有请求都会自动重定向到 https :(。我相信这是在浏览器中实现的,并且在 Chrome 和 Safari 中都发生过。
解决方案:使用 .test(或任何其他 TLD)代替 .dev
以下链接包含有关此主题的更多信息:https://ma.ttias.be/chrome-force-dev-domains-https-via-preloaded-hsts/