为何Safari忽略我的/ etc / hosts文件?


25

我在文件中添加了一些域以阻止(127.0.0.1 mydomain.com/etc/hosts,由于某些原因,Safari似乎忽略了它们。

我试过了:

  • 禁用Safari扩展,
  • 清除缓存(sudo dscacheutil -flushcache),
  • 重新启动Safari和Mac。

Chrome会接受/etc/hosts更改,但Safari不会。附件是我的/etc/hosts文件样本。

我正在使用Mountain Lion 10.8.3运行Safari 6.0.4

有任何想法吗?

##
# Host Database
#
# localhost is used to configure the loopback interface
# when the system is booting.  Do not change this entry.
##
127.0.0.1       localhost
255.255.255.255 broadcasthost
::1             localhost
fe80::1%lo0     localhost
127.0.0.1       facebook.com

3
如果没有响应,Safari将尝试将添加www.到URL的开头。然后,Facebook可以将浏览器重定向到Facebook.com。尝试添加www.facebook.com到文件中,看看是否可行。
JoshRagem 2013年

我认为可能是这样。我尝试了www.facebook.com和* .facebook.com。两者都不起作用。
Nicholas Tulach

当我在代码块中将文本另存为/ etc / hosts时,它确实在Safari中阻止了Facebook。您的/ etc / hosts是否使用CR行尾,或者您是否尝试过将其他条目移到IPv6条目上方
Lri

有趣的是,即使我将它放置在facebook.com的重定向之后,我用于将search.yahoo.com重定向到DuckDuckGo的行也可以正常工作,但Facebook行没有任何作用。完全陷入了这一困境。
Nicholas Tulach 2013年

是否刷新了dns缓存并清除了存储历史和缓存-如果您不知道如何刷新dns缓存,还可以重新启动Mac。
konqui 2014年

Answers:


13

对于相同的问题,我的版本略有不同,并以为我会提到对我有用的方法。

我开发网站。为此,我拥有在本地网络上运行的每个站点的完整副本。当我希望在本地工作时,我总是将“ example.com”条目添加到我的本地/ etc / hosts文件中,并且该条目始终会覆盖DNS,这使我可以在以下位置访问该网站的本地副本:任何浏览器,包括Safari和Firefox。我可以在不影响实际直播网站的情况下工作,然后在完成更改后上传更改。

但是,最近,这项技术对Safari和Firefox都不再起作用,但对Chrome却不起作用,因此一段时间以来,我仅限于使用Chrome进行本地开发。我搜索了google,并尝试了所有建议的修复程序-主机文件末尾的CR,每行仅一个条目,使用“ about:config”进行的各种Firefox配置更改等。

然后,我尝试了这个简单的事情:除了将IPV4版本的地址放入/ etc / hosts文件之外,我还输入了IPV6版本。

之前:

10.0.1.23       example.com

后:

10.0.1.23       example.com
0:0:0:0:0:FFFF:0A00:0117        example.com

添加IPV6条目后,Firefox和Safari都开始命中正确的(本地)服务器。

有许多网站可以将IPV4地址转换为IPV6。只需在“ ipv4到ipv6”上进行Google搜索即可。


您能否检查您的最后一个字符/etc/hosts是换行符?例如,使用打开它vi
2013年

我的/ etc / hosts文件的最后一个字符是“ \ n”或十六进制0A。
弗雷德(Fred)

1
这是正确的答案。为了防止Safari浏览器,你需要两个 IPv4和IPv6条目。已在MacOS 10.12中测试。
alttag

ipaddressguide.com/ipv4-to-ipv6-都添加2行+删除很长的行-分开它们-它的工作原理!
Artemiy StagnantIce Alexeew

8

我遇到了同样的问题,这是由于我的主机文件中的行太长(多个主机映射到同一行上列出的同一IP地址)引起的。我通过将其分成几行来修复它。


与以前正确!
Artemiy StagnantIce Alexeew

8

我花了很多时间在OS X El Captain 10.11.4上,使用/ etc / hosts文件而不是在“系统”偏好设置中使用“家长控制”来阻止站点。最后,它只是像这样工作:

127.0.0.1 www.website.com
127.0.0.1 website.com

我尝试了很多变体,但始终映射到0.0.0.0(0.0.0.0 website.com)。从来没有任何变化。

与网上的一些建议不同,这些建议毫无用处:

  • 没有必要对IPv6阻止像fe80::1%lo0 www.website.com::1 website.com
  • 不需要dscacheutil -flushcache,但以防万一。
  • 粘贴到主机文件的开头还是结尾都没有关系
  • 浏览器的反应似乎有所不同:hosts保存正确的文件后,Chrome和Safari立即阻止了该文件,Firefox暂时忽略了该文件(不清楚重新启动是否足够)。
    • 尝试使用New Private Window或重新启动浏览器进行测试。
  • 不要添加http://https://在地址的开头
  • 无需其他命令。
  • 不要禁用(#已经在主机文件中添加(= 在开头添加注释)。

有用的检查

  • 检查系统是否识别您的重定向dscacheutil -q host -a name website.com-它应显示:

    name: website.com
    ip_address: 127.0.0.1
    
  • 检查的语法hosts文件是正确的:cat -vet /etc/hosts。这显示了不可见的字符:

    • 行应以 $
    • 127.0.0.1和之间website.com应该只有空格或制表符,显示为^I
  • 请注意,对于某些网站(例如Facebook),您可能需要阻止很多地址
  • 我认为该hosts文件应以换行符结尾。

6

我有一个类似的问题。当我的主机文件被符号链接(锯齿)到另一个文件(Safari除外)时,Mac上的每个软件都尊重我的/ etc / hosts文件条目。当您的主机文件是符号链接时,Safari会忽略它。

我的解决方案是使/ etc / hosts成为硬链接。幸运的是,我最新的主机文件位于同一文件系统中。如果不是,那您就很无聊。

糟糕的Safari ...糟糕。


1
我一直在考虑改变职业-直到找到这个。以为我会很聪明,将所有的点文件(和其他配置文件)存储在git存储库中,然后创建符号链接。今天已经拉了我头发剩下的几个小时了。
localheinz

谢谢,您为我节省了数小时的沮丧!令人难以置信的Safari!
DrMeers

4

对我来说(10.12.1“塞拉”)工作的事情:

127.0.0.1   example.com
127.0.0.1   www.example.com
fe80::1%lo0 example.com
fe80::1%lo0 www.example.com

2
这是正确的答案。您必须在主机文件中添加domain.comwww.domain.com。Safari可以添加www.您的请求,并且与不匹配domain.com
瓦格纳

3

在优胜美地为我工作:

  1. 转到系统偏好设置>网络>高级>代理
  2. 勾选自动代理发现,点击确定,然后应用(我没有其他勾选)
  3. 在终端中输入:dscacheutil -flushcache

这将刷新优胜美地中的dnscache。现在,Safari和Chrome应该会尊重您的主机文件。


我想试试这个,但我与我的iPhone捆绑使用,并且“高级>代理”选项不可用。
罗杰·迪克


1

在某些情况下,需要为/etc/hosts文件中的IPv4和IPv6添加回送地址。

假设我们已经为以下IPv4地址添加了一个阻止条目website.com

127.0.0.1 website.com

如果dscacheutil -q host -a name website.com返回两个协议版本的地址:

name: website.com
ipv6_address: rand:omin:vali:dipv:6addr:ess5

name: website.com
ip_address: 127.0.0.1

那么我们需要在hosts文件中添加另一行:

::1 website.com


0

我也遇到了这个问题,但是解决方案非常简单让我们假设您在主机文件中为名称为localhost2的计算机创建一个别名

主机文件中的条目应如下所示:127.0.0.1 localhost2

在safari网址栏中输入“ localhost2”时,您会在下拉列表中注意到默认选项是在google中进行搜索,您应该选择“转到站点localhost2”选项


0

确保您的/ etc / hosts完全具有这些属性。我正在使用自己的用户ID复制,修改和替换文件,除野生动物园外,其他所有程序均正常工作...

$ ls -l /etc/hosts
-rw-r--r--  1 root  wheel  1004 Sep 24 16:03 /etc/hosts

0

对于https地址example.com,我必须同时包含example.com和www.example.com的IPv4和IPv6地址。像这样:

##
# Host Database
#
# localhost is used to configure the loopback interface
# when the system is booting.  Do not change this entry.
##
127.0.0.1       localhost
127.0.0.1       example.com
::1     example.com
127.0.0.1       www.example.com
::1     www.example.com
255.255.255.255 broadcasthost
::1             localhost

-2

根据此博客http://thecoredump.org/2011/09/editing-the-hosts-file-in-mac-os-x-lion/

您必须将条目放置在主机文件的开头。非常不合常规。虽然没有任何个人经验。


他们错了。仅语法重要,位置无关。并且所有其他条目都应始终遵循默认值。

他们可能会说将其放在开头,以避免人们在编辑主机文件时遇到常见的陷阱:他们忘记在最后一行的末尾添加换行符。没有该换行符,最后一行将被忽略。如果您将条目添加到最前面,则很难忘记换行符。
ganbustein 2014年

不知道为什么,但这对我有用。我正在使用优胜美地。
Vicary 2015年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.