MacOS仅为非www网址托管文件条目

时间:2016-12-30 06:27:44

标签: osx-elcapitan hosts-file

我正在运行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会根据需要提取网址,但Firefox会点击localhost。

-

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

2 个答案:

答案 0 :(得分:3)

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

example.com     127.0.0.1
www.example.com 123.52.232.12

进入/etc/hosts文件,123.52.232.12是真实example.com网站的IP地址?

  

为什么会发生这种情况或如何阻止这两个域转到我的主机文件

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

答案 1 :(得分:2)

在运行OSX时,您可以为其添加自定义resolver

创建目录/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的查询。您可以通过自制软件安装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

查找有关homebrew-solution here的更多信息。