Почему Safari игнорирует мой файл / etc / hosts?

25

Я добавил несколько доменов для block ( 127.0.0.1 mydomain.com) в свой /etc/hostsфайл и по какой-то причине Safari, похоже, игнорирует их.

Я пытался:

  • отключение расширений Safari,
  • очистка кеша ( sudo dscacheutil -flushcache),
  • перезагрузка Safari и Mac в целом.

Chrome уважает /etc/hostsизменения, а Safari - нет. Прикрепленный образец моего /etc/hostsфайла.

Я использую Safari 6.0.4 с Mountain Lion 10.8.3

Любые идеи?

##
# 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
Я думал, что это может быть так. Я пробовал как www.facebook.com, так и * .facebook.com. Ни один не работал.
Николай Тулач
Когда я сохранил текст в блоке кода как / etc / hosts, он заблокировал Facebook в Safari. Использует ли ваш / etc / hosts окончание строки CR или вы пытались переместить другие записи выше записей IPv6 ?
Lri
Интересно то, что строка, которую я использую для перенаправления search.yahoo.com на DuckDuckGo, работает, даже если я поставлю ее после перенаправления для facebook.com, но строка Facebook ничего не делает. Полностью озадачен этим.
Николай Тулач
Вы очистили кэш DNS и очистили историю Safary и кеш - если вы не знаете, как очистить кэш DNS, вы также можете перезагрузить Mac.
Конки

Ответы:

13

У меня была немного другая версия той же проблемы, и я подумал, что упомяну, что работает для меня.

Я занимаюсь разработкой сайтов. Для этого у меня есть полная копия каждого сайта, работающего в моей локальной сети. Когда я хочу работать локально, я всегда просто добавляю запись для "example.com" в мой локальный файл / etc / hosts, и это всегда переопределяет DNS, позволяя мне получить доступ к локальной копии сайта в любой браузер, включая Safari и Firefox. Я могу работать, не влияя на действующий сайт, а затем загружать изменения, когда они завершены.

Однако в последнее время эта техника перестала работать как для Safari, так и для Firefox, но не для Chrome, поэтому какое-то время я ограничивался использованием Chrome для локальной разработки. Я искал в Google и попробовал все предложенные исправления - CR в конце файла hosts, только одна запись в строке, различные изменения конфигурации Firefox с использованием «about: config» и т. Д. Ничего не помогало.

Затем я попробовал эту простую вещь: помимо помещения версии адреса 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; просто сделайте поиск Google на «IPv4 на IPv6».

Фред
источник
Не могли бы вы проверить последний символ вашей /etc/hostsновой строки? Например, откройте его с помощью vi.
дан
Последний символ моего файла / etc / hosts - "\ n" или шестнадцатеричный 0A.
Фред
1
Это правильный ответ. Чтобы предотвратить Safari, вам нужно как IPv4 и IPv6 записи. Протестировано в MacOS 10.12.
alttag
ipaddressguide.com/ipv4-to-ipv6 - оба добавляют 2 строки + удаляют очень длинные строки - разделяют их - это работает!
Artemiy StagnantIce Alexeew
8

У меня была такая же проблема, и она была вызвана тем, что в моем файле hosts имелись очень длинные строки (несколько хостов отображались на один и тот же IP-адрес в одной строке). Я исправил это, разделив это на несколько строк.

vincent.io
источник
исправить с предыдущим!
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 блокировали его сразу после сохранения правильного hostsфайла, Firefox некоторое время игнорировал его (неясно, достаточно ли было перезапуска).
    • Попробуйте использовать New Private Windowили перезапустить браузер для его тестирования.
  • Не добавляйте http://или https://в начале адреса
  • Никаких других команд не было необходимости.
  • Не отключайте (= комментарий, добавляя #в начале) строки, которые уже есть в файле hosts.

Полезные проверки

  • Проверьте, распознает ли система ваше перенаправление 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файл должен заканчиваться переводом строки.
bud.dugong
источник
6

У меня была похожая проблема. Каждая часть программного обеспечения на моем Mac учитывала мою запись в файле / etc / hosts, когда мой файл hosts был символически связан (с псевдонимом) с другим файлом, кроме Safari. Когда ваш файл hosts является символической ссылкой, Safari игнорирует его.

Мое решение состояло в том, чтобы сделать / etc / hosts жесткой ссылкой. К счастью, файл hosts, который я обновляю, находится в той же файловой системе. Если это не так, ты потерян.

Плохое сафари ... плохое.

Мэтью Дю Пью
источник
1
Я думал о смене карьеры - пока я не нашел это. Думал, что я буду действительно умен и сохраню все свои точечные файлы (и другие файлы конфигурации) в репозитории git, а затем создаю символические ссылки. Сегодня несколько часов тяну то, что осталось от моих волос.
localheinz
Спасибо, вы сэкономили мне часы разочарования! Невероятное Сафари!
DrMeers
4

Только вещь , которая работает для меня (10.12.1 «Sierra»):

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.comи www.domain.comв файл хоста. Safari может добавить www.в ваш запрос и не будет соответствовать domain.com.
Вагнер
3

Работал для меня на Йосемити:

  1. Перейдите в Системные настройки> Сеть> Дополнительно> Прокси
  2. Установите флажок «Автоматическое обнаружение прокси», нажмите «ОК» и «Применить» (больше ничего не отмечено)
  3. Введите в Терминале: dscacheutil -flushcache

Это сбрасывает dnscache в Йосемити. Теперь Safari и Chrome должны уважать ваш файл hosts.

vascorola
источник
Я хотел попробовать это, но привязываюсь к своему iPhone, и опция Advanced> Proxies недоступна.
Роджер Дуек
2

Попробуйте поместить один или два возврата каретки после последней записи.

...
127.0.0.1       facebook.com

^ Carriage Return
Мистер русский
источник
1
к сожалению это не помогло
Николай Тулач
Вы должны иметь новую строку ( не возврат каретки) в конце каждой строки, включая последнюю.
Ганбастайн
Если только он не работает под управлением Mac OS 9.: o
Уильям Т Фроггард
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
karniol
источник
0

У меня был неправильный конец строки. Это должно быть LF, у меня был CR.

user83570
источник
0

У меня тоже была эта проблема, но решение действительно простое. Предположим, вы создали псевдоним в файле хоста для вашего компьютера с именем localhost2.

Эта запись в файле хоста должна выглядеть следующим образом: 127.0.0.1 localhost2

Когда вы наберете «localhost2» в строке URL-адреса safari, в раскрывающемся списке вы заметите, что по умолчанию используется поиск в Google, вы должны выбрать опцию «Перейти на сайт localhost2».

user104308
источник
0

Убедитесь, что ваши / etc / hosts имеют именно эти атрибуты. Я копировал, изменял и заменял файл, используя свой собственный идентификатор пользователя, все остальные программы продолжали работать, кроме сафари ...

$ ls -l /etc/hosts
-rw-r--r--  1 root  wheel  1004 Sep 24 16:03 /etc/hosts
gae123
источник
0

Для https-адреса example.com мне пришлось включить адреса IPv4 и IPv6 для example.com и www.example.com, прежде чем он заработал. Так:

##
# 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/

Вы должны поместить запись в начало файла хоста. Очень неортодоксально. Хотя личного опыта этого не было.

Линн Фанг
источник
Они ошибаются. Важен только синтаксис, а не местоположение. И все дополнительные записи должны всегда следовать значениям по умолчанию.
Они, вероятно, говорят, чтобы поместить его в начале, чтобы избежать распространенной ошибки людей, редактирующих файл hosts: они забывают поставить новую строку в конце последней строки. Без этой новой строки последняя строка будет игнорироваться. Если вы добавите запись в начало, трудно забыть новую строку.
Ганбастейн
Не уверен, почему, но это работает для меня. Я использую Йосемити.
Vicary