Подстановочные знаки в файле хостов 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-сервер или что-нибудь тяжелое, любые предложения?
Ответы
Ответ 1
Акриловый 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
), вы можете автоматически настроить домены/виртуальные хосты, просто создав каталог.
Ответ 2
Чтобы ответить на ваш вопрос, вы не можете использовать подстановочные знаки в файле 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/.
Ответ 3
Я не думаю, что это возможно.
В любом случае вам придется изменять записи виртуального роутера apache каждый раз, когда вы добавляете новый сайт и местоположение, поэтому это не большая работа, чтобы синхронизировать новое имя с файлом vhost Windows.
Обновление: пожалуйста, проверьте следующий ответ и комментарии к этому ответу. Этот ответ исполняется 6 лет и больше не исправляется.
Ответ 4
Я нашел сообщение о Использование файла Windows Hosts File, в котором также говорится: "Символы не допускаются".
В прошлом я только что добавил дополнительные записи в файл hosts, потому что (как уже говорилось ранее), это не так много дополнительной работы, когда вы уже редактируете конфигурационный файл apache.
Ответ 5
Редактирование файла хостов является меньшим количеством боли, когда вы запускаете "ipconfig/flushdns" из командной строки Windows, вместо перезапуска компьютера.
Ответ 6
Чтобы добавить к большим предложениям уже здесь, 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 с нулевой настройкой.
Ответ 7
Вы могли бы поговорить с вашим сетевым администратором о создании домена для вас (скажем, "evilpuppetmaster.hell" ) и иметь подстановочный знак, чтобы все (*.evilpuppetmaster.hell) разрешало ваш IP
Ответ 8
У нас есть работа с использованием подстановочных 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/
Ответ 9
Я написал простой прокси dns в Python. Он будет читать подстановочные записи в /etc/hosts. См. Здесь: http://code.google.com/p/marlon-tools/source/browse/tools/dnsproxy/dnsproxy.py
Я тестировал в Linux и Mac OS X, но еще не в Windows.
Ответ 10
Вы можете попробовать AngryHosts, который предоставил способ поддержки подстановочных знаков и регулярных выражений. На самом деле это программное обеспечение для улучшения и управления файлами хостов.
Дополнительные функции можно увидеть @http://angryhosts.com/features/
Ответ 11
Я использую 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).
Что он
Ответ 12
Я сделал этот простой инструмент, чтобы занять место хозяев. Поддерживаются регулярные выражения.
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"
}
]
Ответ 13
Я не мог найти запрет в письменной форме, но, по соглашению, файл хостов 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, чтобы поместить пару сотен записей одновременно.
Ответ 14
@petah и Acrylic DNS Proxy - лучший ответ, и в конце он ссылается на способность делать многосайтовый сайт с помощью Apache, который @jeremyasnyder описывает немного дальше...
... однако, в нашем случае мы тестируем многоуровневую систему хостинга, поэтому большинство доменов, которые мы хотим протестировать, переходят к одному и тому же virtualhost
, в то время как пара других направляется в другое место.
Итак, в нашем случае вы просто используете подстановочные символы регулярных выражений в директиве ServerAlias
, например...
ServerAlias *.foo.local
Ответ 15
Вот общая конфигурация для тех, кто пытается достичь цели (подстановочные знаки в среде 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";
}
Ответ 16
Вы можете использовать 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.
Ответ 17
Конфигурация автоматического субдомена 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; путь вашего проекта
Ответ 18
Вы можете использовать динамический DNS-клиент, такой как http://www.no-ip.com. Затем с внешним DNS-сервером CNAME *.mydomain.com на mydomain.no-ip.com.
Ответ 19
Пока вы не можете добавить такой шаблон, вы можете добавить полный список необходимых вам сайтов, по крайней мере для тестирования, который достаточно хорошо работает для меня, в вашем файле hosts, вы просто добавляете:
127.0.0.1 site1.local
127.0.0.1 site2.local
127.0.0.1 site3.local
...
Ответ 20
Возможно, использование apache на многих портах также является альтернативой.