Подстановочные знаки в файле хостов Windows

257

Я хочу настроить локальную машину разработки, чтобы любые запросы *.local перенаправлялись на localhost . Идея состоит в том, что при создании нескольких сайтов я могу просто добавить vhosts в Apache, называемый site1.local , site2.local и т. Д., И разрешить их всем localhost , в то время как Apache обслуживает другой сайт соответственно.

Я нахожусь в Windows XP.

Я попробовал добавить

127.0.0.1       *.local

в мой файл c:\windows\system32\drivers\etc\hosts , также попытался:

127.0.0.1       .local

Ни один из них не работает.

Я знаю, что могу настроить их на разные номера портов, но это боль, потому что трудно запомнить, какой именно порт.

Я не хочу настраивать локальный DNS-сервер или что-нибудь тяжелое, любые предложения?

    
задан EvilPuppetMaster 26.09.2008 в 09:35
источник
  • так наконец, как вы решили это? –  Jigar Joshi 16.04.2010 в 06:08
  • извините, но я этого не сделал! в соответствии с принятым ответом, это просто невозможно –  EvilPuppetMaster 04.06.2010 в 02:03
  • Пожалуйста, не стесняйтесь использовать anysubdomain.reconn.co.uk как работу (если вы в сети), которая всегда будет указывать на ваш localhost (см. мой ответ ниже). –  Paul Grimshaw 17.03.2012 в 00:56
  • Примите «Акриловый DNS-прокси», чтобы вы могли помочь другим людям. Это намного лучше, чем «Не работает», который вы приняли. –  ANDiTKO 08.01.2013 в 10:57
  • Я считаю, что * .local имеет специальную семантику, и вы должны использовать что-то несуществующее. Я использую * .dev, так как я не думаю, что это реально. –  WraithKenny 19.09.2013 в 19:52

19 ответов

394

Акриловый DNS-прокси (бесплатный, с открытым исходным кодом) выполняет эту работу. Он создает прокси-сервер DNS (на вашем собственном компьютере) с собственным файлом хостов. Файл hosts принимает подстановочные знаки.

Загрузка с официального сайта

Ссылка

Настройка прокси-сервера Acrylic

Чтобы настроить Acrylic DNS Proxy, установите его из приведенной выше ссылки, а затем перейдите по ссылке:

  1. Начало
  2. Программы
  3. Акриловый DNS-прокси
  4. Config
  5. Изменить файл пользовательских хостов (AcrylicHosts.txt)

Добавьте следующие строки в конец файла:

127.0.0.1   *.localhost
127.0.0.1   *.local
127.0.0.1   *.lc

Перезапустить службу прокси-сервера Acrylic DNS:

  1. Начало
  2. Программы
  3. Активный DNS-прокси
  4. Config
  5. Перезапуск Acrylic Service

Вам также нужно будет настроить настройку DNS в настройках сетевого интерфейса:

  1. Начало
  2. Панель управления
  3. Сеть и Интернет
  4. Сетевые подключения
  5. Свойства подключения по локальной сети
  6. TCP / IPv4

Установите «Использовать следующий адрес DNS-сервера»:

Preferred DNS Server: 127.0.0.1

Если вы затем объедините этот ответ с ответом jeremyasnyder (используя VirtualDocumentRoot ), вы можете автоматически настроить домены / виртуальные хосты, просто создав каталог.

    
ответ дан Petah 14.03.2012 в 05:17
  • Пожалуйста, поддержите этот ответ. Это, безусловно, лучший ответ на проблему, поставленную этим вопросом. Объедините его с VirtualDocumentRoot и у вас будет удобная рабочая среда. –  Kamil Szot 13.04.2012 в 17:41
  • +1 Замечательно знать об этом инструменте. –  Dan Solovay 10.11.2012 в 19:50
  • Это здорово! Мне также пришлось изменить DNS моего NIC на 127.0.0.1 (вместо «Получить адрес DNS-сервера автоматически»). Пуск -> Панель управления -> Сеть и Интернет -> Сетевые подключения -> Подключение по локальной сети -> Свойства -> Версия интернет-протокола 4 -> Свойства -> Используйте следующие адреса DNS-серверов: -> Предпочтительный DNS-сервер -> 127.0.0.1 –  jiy 08.02.2013 в 23:11
  • Чтобы быть понятным, «файл пользовательских хостов» - это AcrylicHosts.txt, а не AcrylicConfiguration.ini. Может быть, это должно быть очевидно, но это немного смутило меня. –  mhenry1384 07.05.2013 в 16:07
  • @ SB2055 проверить, что ваши настройки DNS в свойствах сети по-прежнему верны. –  Petah 05.01.2014 в 01:30
Показать остальные комментарии
78

Чтобы ответить на ваш вопрос, вы не можете использовать подстановочные знаки в файле hosts под Windows.

Однако, если вы хотите только изменить файл hosts, чтобы новые сайты работали ... вы можете настроить свой Apache таким образом, и вам не нужно продолжать редактирование его конфигурации:

Ссылка

В основном краткое резюме, основанное на моей настройке, добавьте в файл apache.conf следующее:

 LoadModule vhost_alias_module modules/mod_vhost_alias.so

 NameVirtualHost *:80

  <Directory "/xampp/sites">
      Options Indexes FollowSymLinks Includes ExecCGI
      AllowOverride All
      Order allow,deny
      Allow from all 
  </Directory>

  <VirtualHost *:80>
      VirtualDocumentRoot c:/xampp/sites/%-1/%-2+/
  </VirtualHost>

Это позволяет мне добавить запись, например:

127.0.0.1       test.dev

, а затем создайте каталог c: \ xampp \ sites \ dev \ test и поместите туда необходимые файлы, и он просто работает.

Другой вариант - использовать теги <Directory> в apache.conf и ссылаться на страницы из Ссылка .

    
ответ дан jeremyasnyder 07.11.2008 в 14:42
  • Можете ли вы использовать подстановочные знаки на OSX? –  cjm2671 16.10.2011 в 17:24
  • Да, используя Bind - clintberry.com/2011/... –  Ryan Schumacher 07.05.2012 в 21:33
  • Это лучший ответ. Работал как CHARM на моей Windows 7 VM на моем Mac для веб-разработки. –  Aubrey Portwood 04.06.2014 в 23:07
  • Да .. «как я не знал этого раньше ?!» :) Я реструктурирую весь свой портфолио, но теперь просто царапаю голову, когда дело доходит до «общедоступных» папок .. какое решение вы использовали для этого? ? Напр. теперь я использую 'public.myapp'. –  Ionut 30.10.2017 в 11:25
29

Я не думаю, что это возможно.

В любом случае вам придется изменять записи виртуального роутера apache каждый раз, когда вы добавляете новый сайт и местоположение, поэтому не очень важно синхронизировать новое имя с файлом vhost для Windows.

Обновление: пожалуйста, проверьте следующий ответ и комментарии к этому ответу. Этот ответ исполняется 6 лет и больше не исправляется.

    
ответ дан Biri 26.09.2008 в 09:41
  • Но при использовании Nginx нет необходимости изменять файл конфигурации Nginx, чтобы добавить новую группу доменов второго уровня * .localhost. Итак, это минус файлов hosts. –  sergzach 19.02.2012 в 07:58
  • Просто укажите, что, когда у вас многоязычный сайт, вы можете иметь <VirtualHost> с ServerAlias ​​* .mydomain.localhost (* - код языка), так что вам не нужно редактировать httpd.conf каждый раз вы добавляете новый язык; но вам все равно нужно добавить поддомен в файл hosts, следовательно, актуальность вопроса выше. –  Benjamin 27.03.2012 в 11:05
  • Динамические виртуальные хосты являются ключевыми словами здесь и поддерживаются большинством серверов, то есть Apache и Nginx. Так что нет, вам определенно не нужно прикасаться к Apache-config каждый раз, когда вы создаете проект. –  Valentin Klinghammer 11.12.2012 в 12:19
  • У нас также могут быть подстановочные виртуальные хосты, это только до файла hosts –  ericn 28.12.2012 в 07:59
4

Я нашел сообщение о использовании файла хостов Windows , в котором также говорится: «Никаких подстановочных знаков не разрешено».

В прошлом я только что добавил дополнительные записи в файл hosts, потому что (как было сказано ранее), это не такая уж большая работа, когда вы уже редактируете конфигурационный файл apache.

    
ответ дан Kevin Hakanson 28.09.2008 в 01:58
  • Чем дольше вы делаете файл hosts, тем больше времени потребуется для разрешения запросов. Не очень хорошее решение, если у вас много записей. –  cchamberlain 08.06.2016 в 22:51
4

Редактирование файла хостов является меньшим количеством боли, когда вы запускаете «ipconfig / flushdns» из командной строки Windows, вместо перезапуска компьютера.

    
ответ дан Joe 17.10.2010 в 19:43
  • он не очищает кеш браузера dns, а окна. Поэтому он должен ждать 20-30 минут, чтобы браузер выпустил кэширование dns. –  Jacob Melvad Jensen 29.11.2012 в 12:59
  • @Joe - это спасло мне много перезапусков, спасибо! –  soupy1976 31.10.2013 в 14:03
4

Чтобы добавить к большим предложениям уже здесь, XIP.IO является фантастическим подстановочным DNS-сервером, который является общедоступным.

      myproject.127.0.0.1.xip.io  -- resolves to -->   127.0.0.1
  other.project.127.0.0.1.xip.io  -- resolves to -->   127.0.0.1
   other.machine.10.0.0.1.xip.io  -- resolves to -->   10.0.0.1

(Возможность указания адресов без обратной связи является фантастикой для тестирования сайтов на устройствах iOS, где вы не можете получить доступ к файлу hosts.)

Если вы объедините это с некоторыми из настроек Apache, упомянутыми в других ответах, вы можете добавить VirtualHosts с настройкой нуля .

    
ответ дан Simon East 20.03.2015 в 04:37
3

Вы могли бы поговорить с вашим сетевым администратором о создании домена для вас (скажем, «evilpuppetmaster.hell») и иметь подстановочный знак, чтобы все (* .evilpuppetmaster.hell) разрешало ваш IP

    
ответ дан Stu Thompson 26.09.2008 в 10:02
  • Спасибо, но это на домашнем devserver, нет ни администратора DNS, ни сетевого администратора. –  EvilPuppetMaster 26.09.2008 в 10:04
  • ОК, может быть, у вас есть доступ к домену или кто-то знает, кто это делает? Например: * .evilpuppetmatser.arealdomain.com –  Stu Thompson 26.09.2008 в 10:10
  • 1) Нет причин * .evilpuppetmatser.arealdomain.com не может разрешить 127.0.0.1, 2) Я не предлагаю внешний DNS-сервер. Я предлагаю вам использовать поддомен в реальном домене. Технически любой может решить server.evp.arealdomain.com. –  Stu Thompson 26.09.2008 в 10:19
  • Я знаю, что это большой обходной путь, но он отлично работает! –  Paul Grimshaw 17.03.2012 в 00:34
  • Есть также некоторые публичные, такие как * .127.0.0.1.xip.io и другие –  Dave James Miller 28.02.2013 в 00:03
Показать остальные комментарии
3

У нас есть работа с использованием подстановочных DNS на нашем локальном DNS-сервере: добавьте A -ную запись, например, *.local -> 127.0.0.1

Я думаю, что ваши сетевые настройки должны будут иметь выбранный суффикс домена в списке поиска суффикса домена для машин в сети, поэтому вы можете захотеть заменить .local на внутренний домен вашей компании (например, .int ) и затем добавьте подобъект, например .localhost.int , чтобы понять, для чего он нужен.

Таким образом, *.localhost.int решит 127.0.0.1 для всех в сети, а настройки файла конфигурации для всех разработчиков будут «просто работать», если конечные точки будут отвисеть от этого субдомена, например. site1.localhost.int , site2.localhost.int Это в значительной степени схема, которую мы ввели.

dnsmasq тоже выглядит неплохо, но я еще не пробовал: Ссылка

    
ответ дан Matthew Skelton 23.07.2013 в 15:46
  • +1 для упоминания dnsmasq. проверить эту статью: blog.evan.pro/... –  David 25.07.2013 в 00:50
2

Я написал простой прокси dns в Python. Он будет читать подстановочные записи в / etc / hosts. См. Здесь: Ссылка

Я тестировал в Linux & amp; Mac OS X, но еще не в Windows.

    
ответ дан marlonyao 02.05.2011 в 11:32
2

Вы можете попробовать AngryHosts , который предоставил способ поддержки подстановочных знаков и регулярных выражений. На самом деле, это программное обеспечение для улучшения и управления файлами хостов.
Дополнительные функции можно увидеть @ Ссылка

    
ответ дан Topro 05.03.2012 в 14:41
  • Да, я дал это выстрел и, кажется, хорошо работает. :-) –  Simon East 20.12.2012 в 02:44
2

Я использую DNSChef для этого.

Ссылка

Вам нужно загрузить приложение, в Linux или Mac вам понадобится python для его запуска. Windows имеет свой собственный exe.

Вы должны создать ini-файл с вашими записями DNS, например

[A]
*.google.com=192.0.2.1
*.local=127.0.0.1
*.devServer1.com=192.0.2.3

Затем вы должны запустить приложение dns с правами администратора

sudo python dnschef.py --file myfile.ini -q

или в окнах

runas dnschef.exe --file myfile.ini -q

Наконец, вам нужно настроить в качестве единственного DNS свою локальную среду хоста (сеть, интерфейс, dns или аналогичный или в linux /etc/resolv.conf).

Вот оно

    
ответ дан casivaagustin 28.02.2014 в 15:07
2

Я сделал этот простой инструмент, чтобы занять место хозяев. Поддерживаются регулярные выражения. Ссылка

Пример конфигурации:

[
    {
        "Pattern": "^.*$",
        "NameServer": "8.8.8.8"
    },
    {
        "Pattern": "^(.*\.googlevideo\.com)|((.*\.)?(youtube|ytimg)\.com)$",
        "Address": "203.66.168.119"
    },
    {
        "Pattern": "^.*\.cn$",
        "NameServer": "114.114.114.114"
    },
    {
        "Pattern": "baidu.com$",
        "Address": "127.0.0.1"
    }
]
    
ответ дан Stackia 04.03.2015 в 05:04
0

Я не мог найти запрет в письменной форме, но, по соглашению, файл хостов Windows внимательно следит за файлом хостов UNIX, и вы не можете указывать в этом файле ссылки на имена хостов.

Если вы читаете страницу руководства, в ней говорится:

DESCRIPTION
     The hosts file contains information regarding the known hosts on the net-
     work.  For each host a single line should be present with the following
     information:

           Internet address
           Official host name
           Aliases

Хотя он и говорит,

     Host names may contain any printable character other than a field delim-
     iter, newline, or comment character.

, что неверно с практического уровня.

В принципе, код, который смотрит файл / etc / hosts, не поддерживает подстановочную запись.

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

    
ответ дан benc 05.12.2008 в 01:48
0

@petah и Acrylic DNS Proxy - лучший ответ, и в конце он ссылается на способность делать многосайтовый сайт с помощью Apache, который @jeremyasnyder описывает немного дальше ...

... однако, в нашем случае мы тестируем многоуровневую систему хостинга, и поэтому большинство домены, которые мы хотим протестировать, переходят к тому же virtualhost , в то время как другая пара направлена в другом месте.

Итак, в нашем случае вы просто используете подстановочные знаки регулярных выражений в директиве ServerAlias , например ...

ServerAlias *.foo.local
    
ответ дан oucil 16.01.2014 в 05:50
0

Вот общая конфигурация для тех, кто пытается достичь цели (подстановочные знаки в среде dev, т. е. XAMPP - этот пример предполагает, что все сайты указывают на одну и ту же базу кода)

файл hosts (добавить запись)

файл:% SystemRoot% \ system32 \ drivers \ etc \ hosts

127.0.0.1   example.local

Ссылка

file: \ XAMPP \ etc \ httpd.conf

# Virtual hosts
Include etc\extra\httpd-vhosts.conf

Ссылка

file: XAMPP \ etc \ extra \ httpd-vhosts.conf

<VirtualHost *:80>
    ServerAdmin [email protected]
    DocumentRoot "\path_to_XAMPP\htdocs"
    ServerName example.local
    ServerAlias *.example.local
#    SetEnv APP_ENVIRONMENT development
#    ErrorLog "logs\example.local-error_log"
#    CustomLog "logs\example.local-access_log" common
</VirtualHost>

перезапустить apache

создать файл pac:

сохранить как whatever.pac, куда захотите, а затем загрузить файл в сети браузера & gt; proxy & gt; auto_configuration (перезагрузить, если вы измените это)

function FindProxyForURL(url, host) {
  if (shExpMatch(host, "*example.local")) {
    return "PROXY example.local";
  }
  return "DIRECT";
}
    
ответ дан Daniel Jordi 19.08.2014 в 21:56
  • Не работает, еще не знаю о PAC, но эта строка возвращает «PROXY example.local»; не будет возвращать прокси-порт ip: порт, который будет использоваться браузером в качестве прокси-сервера? –  Ionut 30.10.2017 в 10:50
0

Вы можете использовать echoipdns для этого ( Ссылка ).

Запустив echoipdns local , все запросы для .local subdomains перенаправляются на 127.0.0.1, поэтому любой домен с xyz.local и т. д. будет разрешен до 127.0.0.1. Вы можете использовать любой другой суффикс, а также просто заменить локальное имя, которое вы хотите.

Echoipdns еще более эффективен, если вы хотите использовать свой url с других компьютеров в сети, вы все равно можете использовать его с нулевой конфигурацией.

Например, Если ваш IP-адрес устройства равен 192.168.1.100, теперь вы можете использовать доменное имя xyz.192-168-1-100.local, которое всегда будет разрешено для 192.168.1.100. Эта магия выполняется echoipdns, если посмотреть на ip-адрес во второй части имени домена и вернуть тот же IP-адрес в DNS-запросе. Вам нужно будет запустить echoipdns на компьютере, с которого вы хотите получить доступ к удаленной системе.

echoipdns также может быть настроен как автономный прокси DNS, поэтому, просто указывая на этот DNS, вы можете теперь использовать все вышеупомянутые преимущества, не запуская специальную команду каждый раз, и вы даже можете использовать ее с мобильных устройств.

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

echoipdns работает на Mac, Linux и Windows.

ПРИМЕЧАНИЕ. Я автор для echoipdns.

    
ответ дан arva 09.01.2015 в 11:12
-1

Вы можете использовать динамический DNS-клиент, например Ссылка . Затем с внешним DNS-сервером CNAME * .mydomain.com на mydomain.no-ip.com.

    
ответ дан Ben Manns 30.04.2009 в 23:03
  • , который разрешит ваш внешний ip, и обычно это просто приведет к созданию вашей конфигурации конфигурации маршрутизатора / модемов –  Sam 17.01.2011 в 16:09
-1

Пока вы не можете добавить такой шаблон, вы можете добавить полный список необходимых вам сайтов, по крайней мере для тестирования, который достаточно хорошо работает для меня, в вашем файле hosts, вы просто добавляете:

127.0.0.1 site1.local
127.0.0.1 site2.local
127.0.0.1 site3.local
...

    
ответ дан BlackTigerX 28.06.2012 в 22:21
  • Я думаю, что оригинальный плакат пытается избежать хлопот этого шага. –  Simon East 20.03.2015 в 05:08
-3

Возможно, использование apache на многих портах также является альтернативой.

    
ответ дан BFF 16.06.2009 в 23:35
  • Оригинальный плакат сказал: Я знаю, что могу настроить их на разные номера портов, но это боль, потому что трудно запомнить, какой именно порт. –  Simon East 20.03.2015 в 05:07