早上好。
尝试让它工作但我很确定我遗漏了一些东西。
我的虚拟主机配置文件:
<VirtualHost 127.0.0.11:80>
ServerName test.localhost
#...
</VirtualHost>
我的 /etc/hosts 文件:
...
127.0.0.11 test.localhost
...
当我去http://127.0.0.11它有效,但是当我去http://测试.localhost但事实并非如此——它返回到我已配置的默认站点<VirtualHost _default_:*>...</VirtualHost>
。我已经搜索了几个小时,有点不知所措,希望有人能给我指点一下该看什么。
谢谢。
答案1
看起来所有顶级域名为 .localhost 的域名都映射到 127.0.0.1。当我将虚拟主机 ServerName 更改为“test.local”并相应地更新 /etc/hosts 时,一切正常。
来自RFC2606:
“.localhost” TLD 传统上在主机 DNS 实现中被静态定义为具有指向环回 IP 地址的 A 记录,并保留用于此类用途。任何其他用途都会与广泛部署的假定此用途的代码相冲突。
我假设“环回 IP 地址”是 127.0.0.1。
虽然我能够从http://测试.localhost/并获取正确的数据,实际上,从我的网络浏览器 (chromium) 加载该 URL 是从 127.0.0.1 拉取的,正如我在网络开发人员工具中默认页面的请求标头中观察到的那样。我猜 chromium 不会检查 /etc/hosts 条目中是否有任何对具有 .localhost TLD 的主机的请求...我可以去http://onfasofn3noidsnfd90.localhost并且它仍然映射到托管在 127.0.0.1 上的我的默认网站。
参考文献:
- 在“.localhost”顶级域名上 -https://en.wikipedia.org/wiki/.localhost
- 描述 .localhost TLD 的 RFC -https://www.rfc-editor.org/rfc/rfc2606- 第二部分最后一段
- 关于为什么 chromium 会自动解析所有与 *.localhost 匹配的主机名而不检查本地主机文件 (/etc/hosts 或 LMHOSTS) 的讨论主题。 TL;DR:铬按预期工作-https://code.google.com/p/chromium/issues/detail?id=489973