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

256

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

  • 0
    так наконец, как ты решил это?
  • 4
    извини но я этого не сделал! согласно принятому ответу, это просто невозможно
Показать ещё 4 комментария
Теги:
dns
virtual-hosts
hosts

20 ответов

385
Лучший ответ

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

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

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

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

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

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

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

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

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

  • Начало
  • Программы
  • Активный DNS-прокси
  • Config
  • Перезапуск Acrylic Service

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

  • Начало
  • Панель управления
  • Сеть и Интернет
  • Сетевые подключения
  • Свойства подключения по локальной сети
  • TCP/IPv4

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

Preferred DNS Server: 127.0.0.1

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

  • 51
    Пожалуйста, проголосуйте за этот ответ. Это, безусловно, лучший ответ для проблемы, поставленной этим вопросом. Объедините его с VirtualDocumentRoot, и вы получите удобную рабочую среду.
  • 3
    +1 Приятно знать об этом инструменте.
Показать ещё 14 комментариев
78

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

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

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

  • 0
    Можете ли вы использовать подстановочные знаки на OSX?
  • 0
    Да, используя Bind - clintberry.com/2011/…
Показать ещё 2 комментария
30

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

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

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

  • 3
    Но при использовании Nginx нет необходимости изменять конфигурационный файл Nginx для добавления новой группы доменов второго уровня * .localhost. Итак, это минус файла hosts.
  • 8
    Просто ServerAlias *.mydomain.localhost , что когда у вас есть многоязычный веб-сайт, у вас может быть <VirtualHost> с ServerAlias *.mydomain.localhost ( * код языка), так что вам не придется редактировать httpd.conf каждый раз, когда вы добавляете новый язык; но вам все равно нужно добавить поддомен в файл hosts, отсюда и актуальность вопроса выше.
Показать ещё 2 комментария
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 с нулевой настройкой.

4

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

  • 1
    он не сбрасывает кэш DNS браузера, а окно. Поэтому он должен ждать 20-30 минут, пока браузер не выпустит DNS-кеширование.
  • 0
    @Joe - это спасло меня от многих перезапусков, спасибо!
4

Я нашел сообщение о Использование файла Windows Hosts File, в котором также говорится: "Символы не допускаются".

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

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

3

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

  • 1
    Спасибо, но это на домашнем devserver, DNS или сетевой администратор недоступны.
  • 0
    Хорошо, может быть, у вас есть доступ к домену или кто-то знает, кто делает? Например: * .evilpuppetmatser.arealdomain.com
Показать ещё 5 комментариев
2

Я сделал этот простой инструмент, чтобы занять место хозяев. Поддерживаются регулярные выражения. 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"
    }
]
2

Я использую 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

или в окнах

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

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

Что он

2

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

  • 0
    Да, я дал этому шанс и, кажется, работает хорошо. :-)
2

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

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

0

Конфигурация автоматического субдомена config nginx с помощью Acrylic DNS Proxy

файл auto.conf для вашей папки сайтов nginx

server {
    listen 80;
    server_name ~^(?<branch>.*)\.example\.com;
    root /var/www/html/$branch/public;  

    index index.html index.htm index.php;

    charset utf-8;

    location / {
        try_files $uri $uri/ /index.php$is_args$args;
    }

    location = /favicon.ico { access_log off; log_not_found off; }
    location = /robots.txt  { access_log off; log_not_found off; }

    error_log  /var/log/nginx/$branch.error.log error;

    sendfile off;

    client_max_body_size 100m;

    location ~ \.php$ {
       try_files $uri /index.php =404;
       fastcgi_pass php-fpm:9000;
       fastcgi_index index.php;
       fastcgi_buffers 16 16k;
       fastcgi_buffer_size 32k;
       fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
       include fastcgi_params;
    }

    location ~ /\.ht {
        deny all;
    }
}

Добавьте в хост файл Acrylic 127.0.0.1 example.com *.example.com и перезапустите сервис Acrylic. $ branch - ваше имя субдомена.

Установите вместо root/var/www/html/$ branch/public; путь вашего проекта

0

Вы можете использовать echoipdns для этого (https://github.com/zapty/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.

0

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

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

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

127.0.0.1   example.local

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

file:\XAMPP\etc\httpd.conf

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

Конфигурация 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, куда захотите, а затем загрузить файл в сети браузерa > прокси > параметры автоконфигурации (перезагрузите, если вы измените это)

function FindProxyForURL(url, host) {
  if (shExpMatch(host, "*example.local")) {
    return "PROXY example.local";
  }
  return "DIRECT";
}
  • 0
    Не сработало, пока не знаю о PAC, но эта строка 'return "PROXY example.local";' не вернет прокси ip: порт для использования браузером в качестве прокси?
0

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

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

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

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

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

-1

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

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

  • 0
    Я думаю, что оригинальный плакат пытается избежать хлопот этого шага.
-1

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

  • 2
    это разрешило бы к вашему внешнему ip, и обычно это просто вызвало бы страницу конфигурации вашего маршрутизатора / модемов
-4

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

  • 0
    Оригинальный плакат гласил: « Я знаю, что могу настроить их на разные номера портов, но это очень сложно, так как трудно вспомнить, какой порт какой».

Ещё вопросы

Сообщество Overcoder
Наверх
Меню