2016-12-30 2 views
6

Я запускаю MacOSX 10.11.4.Запись в MacOS для доступа только для не-www URL

Я хочу, чтобы example.com указывал на мой локальный сервер Apache, но www.example.com указывает на фактический веб-сайт.

Пример: я следующую запись в моей/и т.д./файл хостов: 127.0.0.1 example.com Если я свистеть example.com и www.example.com, они оба попали 127.0.0.1 (я считаю, потому что канонический URL является признанные одинаковыми).

Интересное примечание: Chrome потянет URL-адрес так, как я хочу, но Firefox поразит localhost для обоих.

-

Edit: Я знаю, что, используя нечто вроде example.local более условны и устраняет эту проблему полностью; однако моя работа уже давно использует метод www/non-www и, если возможно, хотела бы сохранить ее.

+1

Я думаю, что это должна быть вещь Firefox, а не что-то делать с файлом hosts - файл hosts не отличает http vs https, или Firefox от Chrome, поэтому, если бы это была проблема, это повлияло бы на все из вышеперечисленных. –

+0

@ GordonDavisson, это была моя первоначальная мысль; но использование 'ping' в терминале приводит к тому, что оба значения будут равны 127.0.0.1. Я бы подумал, что две проблемы (Firefox и команда ping) связаны между собой, хотя это может не иметь ничего общего с файлом hosts. – Jason

+0

Это действительно странно.Что такое 'dscacheutil -q host -a name example.com' и' dscacheutil -q host -a name www.example.com' отчет? Это проходит через системный преобразователь, поэтому он должен сказать вам, что думает уровень ОС. –

ответ

3

Это может быть слишком легко, но почему бы вам не ставить

example.com  127.0.0.1 
www.example.com 123.52.232.12 

в файл /etc/hosts с 123.52.232.12 быть IP-адрес реального сайта example.com?

, почему это происходит и как остановить оба домена от перехода к своим хозяевам файл

Это порядок разрешения по умолчанию, с the hosts file autoexpanding для поддоменов. solution by @fragmentedreality обеспечивает обходное решение с использованием преобразователя dnsmasq, который также рекомендуется в https://serverfault.com/questions/431605/dont-automatically-include-all-subdomains-in-dnsmasq-address и описан в https://gist.github.com/ogrrd/5831371.

+1

Это было мое временное исправление, но на самом деле он не отвечает на вопрос, почему это происходит, или как остановить оба домена от перехода на мой файл hosts. – Jason

+0

Файл hosts запрашивается ** перед ** любыми запросами DNS. И, как описано, он расширяет домены на поддомены. – fragmentedreality

+0

@ fragmentedreality: Конечно, перед этим читается. Тем не менее, параметр хоста dnsmasq заменяет файл hosts, см. [Его страницу руководства] (http://www.thekelleys.org.uk/dnsmasq/docs/dnsmasq-man.html): * параметры записи хоста считаются считанными ** перед ** host-files * [внимание мой] –

2

Поскольку вы работаете на OSX, для этого можете добавить пользовательские resolver.

Создайте каталог /etc/resolver/ и добавьте файл для домена, который вы хотите разрешить (например, example.com). Внутри файла вы можете указать альтернативные серверы имен для использования в указанном домене. По умолчанию имя файла определяет домен (подробнее см. Man-страницу).

$ 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 

Найти более подробную информацию о доморощенного растворе here.

Смежные вопросы