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

Я хочу Настроить локальную машину разработки так, чтобы любые запросы на *.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-сервер или что-то сложное, какие-либо предложения?

19 ответов


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

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

http://mayakron.altervista.org/support/browse.php?path=Acrylic&name=Home

настройка акрилового DNS-прокси

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

  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. Перезапуск Акриловой Службы

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

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

Set " используйте следующий DNS-сервер адрес":

Preferred DNS Server: 127.0.0.1

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


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

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

http://postpostmodern.com/instructional/a-smarter-mamp/

В основном краткое резюме на основе моей установки, добавьте следующее в свой 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 и ссылки на страницы http://localhost/project/.


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

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

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


Я нашел сообщение о С помощью файла Windows Hosts что же говорит "Нет маски."

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


Редактирование файла hosts меньше боли при запуске "ipconfig / flushdns" из командной строки windows, вместо перезагрузки компьютера.


чтобы добавить к большим предложениям уже здесь, 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 с ноль setup.


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


у нас есть эта работа с использованием подстановочного 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 также выглядит красиво, но я еще не пробовала : http://ihaveabackup.net/2012/06/28/using-wildcards-in-the-hosts-file/


Я написал простой DNS-прокси на Python. Он будет читать подстановочные знаки в/etc / hosts. Смотрите здесь: http://code.google.com/p/marlon-tools/source/browse/tools/dnsproxy/dnsproxy.py

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


вы можете попробовать AngryHosts, который предоставил способ поддержки подстановочного знака и регулярного выражения. На самом деле, это программное обеспечение для улучшения и управления файлами hosts.
Больше возможностей можно увидеть@ http://angryhosts.com/features/


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

https://thesprawl.org/projects/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

или в windows

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

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

вот это


Я сделал этот простой инструмент, чтобы занять место хозяев. Поддерживаются регулярные выражения. https://github.com/stackia/DNSAgent

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

[
    {
        "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"
    }
]

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

Если Вы читаете man-страницу, она говорит:

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, не поддерживает подстановочную запись.

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


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

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

поэтому в нашем случае вы просто используете подстановочные знаки regex в


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

hosts file (добавить запись)

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

127.0.0.1   example.local

httpd.конфигурация conf (включить vhosts)

файл: \XAMPP\etc\httpd.conf

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

httpd-vhosts.конфигурации

: В XAMPP\и т. д.\дополнительную\файл httpd-виртуальных доменов.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:

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

function FindProxyForURL(url, host) {
  if (shExpMatch(host, "*example.local")) {
    return "PROXY example.local";
  }
  return "DIRECT";
}

вы можете использовать echoipdns для этого (https://github.com/zapty/echoipdns).

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

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

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

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

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

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

примечание: Я автор для echoipdns.


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


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

127.0.0.1 site1 в.местные
127.0.0.1 site2.местные
127.0.0.1 site3.местные
...


У apache слушать на многих портах также является альтернативой.