6

我正在运行 MacOSX 10.11.4。

我想让 example.com 指向我在本地运行的 apache 服务器,但让 www.example.com 指向实际的网站。

示例:我的 /etc/hosts 文件中有以下条目: 127.0.0.1 example.com 如果我 ping example.com 和 www.example.com,它们都命中 127.0.0.1(我相信因为规范 URL 被识别为相同)。

有趣的是,Chrome 会根据需要提取 URL,但 Firefox 会同时访问 localhost。

-

编辑:我知道使用类似 example.local 的东西更传统,完全避免了这个问题;但是,我的工作已经使用 www/non-www 方法有一段时间了,如果可能的话,我想保留它。

4

2 回答 2

3

这可能太容易了,但你为什么不放

example.com     127.0.0.1
www.example.com 123.52.232.12

到您的/etc/hosts文件中,123.52.232.12 是真实 example.com 站点的 IP 地址?

为什么会发生或如何阻止两个域访问我的主机文件

这是默认的解析顺序,文件hosts子域自动扩展。@fragmentedreality的解决方案通过使用 dnsmasq 解析器提供了一种解决方法,在https://serverfault.com/questions/431605/dont-automatically-include-all-subdomains-in-dnsmasq-address中也推荐了该解决方案,并在https中进行了描述://gist.github.com/ogrrd/5831371

于 2017-03-13T21:38:01.030 回答
2

当您运行 OSX 时,您可以为此添加自定义解析器

创建目录/etc/resolver/并为要解析的域添加一个文件(即 example.com)。在文件中,您可以指定用于指定域的替代名称服务器。默认情况下,文件名定义域(有关更多详细信息,请参见手册页)。

$ sudo mkdir -p /etc/resolver
$ echo "nameserver 127.0.0.1" | sudo tee /etc/resolver/example.com > /dev/null

您可以检查是否使用命令应用了解析器scutil --dns

现在您只需要运行像 dnsmasq 这样的本地名称服务器即可将查询解析为127.0.0.1. 您可以通过 homebrew 安装 dnsmasq 或在docker-container中运行它:

$ docker run -p 53:53/tcp -p 53:53/udp --cap-add=NET_ADMIN \
    andyshinn/dnsmasq:2.75 \
    --host-record=example.com,127.0.0.1

在此处查找有关自制解决方案的更多信息。

于 2017-03-13T22:37:29.173 回答