Caracteres curinga em um arquivo de hosts do Windows

Eu quero configurar minha máquina de desenvolvimento local para que quaisquer solicitações para *.local sejam redirecionadas para localhost . A ideia é que, à medida que desenvolvo vários sites, posso adicionar vhosts ao Apache chamado site1.local , site2.local , etc, e tê-los todos resolvidos para localhost , enquanto o Apache serve um site diferente de acordo.

Eu estou no Windows XP.

Tentei adicionar

 127.0.0.1 *.local 

para o meu arquivo c:\windows\system32\drivers\etc\hosts , também tentei:

 127.0.0.1 .local 

Nenhum dos dois parece funcionar.

Eu sei que posso configurá-los em diferentes números de porta, mas isso é um problema, pois é difícil lembrar qual porta é qual.

Eu não quero ter que configurar um servidor DNS local ou qualquer coisa difícil, alguma sugestão?

   

O acrílico DNS Proxy (livre, código aberto) faz o trabalho. Ele cria um servidor DNS proxy (em seu próprio computador) com seu próprio arquivo de hosts. O arquivo hosts aceita curingas.

Faça o download do site oficial

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

Configurando o proxy de DNS acrílico

Para configurar o Acrylic DNS Proxy, instale-o a partir do link acima e, em seguida, vá para:

  1. Começar
  2. Programas
  3. Proxy de DNS acrílico
  4. Config
  5. Editar arquivo de hosts personalizados (AcrylicHosts.txt)

Adicione as seguintes linhas no final do arquivo:

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

Reinicie o serviço de proxy de DNS acrílico:

  1. Começar
  2. Programas
  3. Proxy de DNS acrílico
  4. Config
  5. Reinicie o serviço acrílico

Você também precisará ajustar sua configuração de DNS nas suas configurações de interface de rede:

  1. Começar
  2. Painel de controle
  3. Rede e Internet
  4. Conexões de rede
  5. Propriedades de conexão de área local
  6. TCP / IPv4

Defina “Usar o seguinte endereço de servidor DNS”:

 Preferred DNS Server: 127.0.0.1 

Se você combinar essa resposta com a resposta de jeremyasnyder (usando o VirtualDocumentRoot ), você pode automaticamente configurar domínios / hosts virtuais simplesmente criando um diretório.

Para responder à sua pergunta, você não pode usar curingas no arquivo hosts no Windows.

No entanto, se você quiser apenas alterar o arquivo de hosts para que novos sites funcionem … você pode configurar seu Apache dessa forma e não precisa continuar editando sua configuração:

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

Basicamente, um resumo rápido baseado na minha configuração, adicione o seguinte ao seu arquivo apache.conf:

  LoadModule vhost_alias_module modules/mod_vhost_alias.so NameVirtualHost *:80  Options Indexes FollowSymLinks Includes ExecCGI AllowOverride All Order allow,deny Allow from all   VirtualDocumentRoot c:/xampp/sites/%-1/%-2+/  

Isso me permite adicionar uma input como:

 127.0.0.1 test.dev 

e então faça o diretório c: \ xampp \ sites \ dev \ test e coloque os arquivos necessários lá dentro e ele simplesmente funciona.

A outra opção é usar as tags no apache.conf e referenciar as páginas a partir de http: // localhost / project / .

Eu não acho que isso seja possível.

De qualquer forma, você precisa modificar as inputs do apache virtualroot toda vez que adicionar um novo site e local, portanto, não é um grande trabalho sincronizar o novo nome com o arquivo vhost do Windows.

Atualização: por favor, verifique a próxima resposta e os comentários sobre esta resposta. Esta resposta é de 6 anos e não está mais correta.

Eu encontrei uma postagem sobre Usando o arquivo de hosts do Windows que também diz “Nenhum caractere curinga é permitido”.

No passado, acabei de adicionar as inputs adicionais ao arquivo hosts, porque (como dito anteriormente), não é muito trabalho extra quando você já está editando o arquivo de configuração do Apache.

Editar o arquivo hosts é menos penoso quando você executa “ipconfig / flushdns” no prompt de comando do Windows, em vez de reiniciar o computador.

Para adicionar as ótimas sugestões já aqui, o XIP.IO é um fantástico servidor DNS curinga que está publicamente disponível.

  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 

(A capacidade de especificar endereços não-loopback é fantástica para testar sites em dispositivos iOS nos quais você não pode acessar um arquivo de hosts.)

Se você combinar isso com algumas das configurações do Apache mencionadas em outras respostas, você pode potencialmente adicionar VirtualHosts com configuração zero .

Você poderia convencer seu administrador de rede a configurar um domínio para você (digamos, ‘evilpuppetmaster.hell’) e ter o curinga lá, para que tudo (* .evilpuppetmaster.hell ‘) resolva o seu IP.

Temos esse trabalho usando o DNS curinga em nosso servidor DNS local: adicione um registro A como *.local -> 127.0.0.1

Acho que suas configurações de rede precisarão ter o sufixo de domínio escolhido na lista de pesquisa de sufixo de domínio para máquinas na rede, portanto, convém replace .local pelo domínio interno de sua empresa (por exemplo, .int ) e adicionar um subdomínio como .localhost.int para deixar claro o que é.

Portanto, *.localhost.int seria resolvido para 127.0.0.1 para todos na rede, e as configurações do arquivo de configuração para todos os desenvolvedores “apenas funcionariam” se os endpoints fossem desligados daquele subdomínio, por exemplo, site2.localhost.int , site2.localhost.int basicamente o esquema que introduzimos.

O dnsmasq também parece legal, mas eu não tentei ainda: http://ihaveabackup.net/2012/06/28/using-wildcards-in-the-hosts-file/

Eu escrevi um proxy dns simples em Python. Ele lerá inputs curinga em / etc / hosts. Veja aqui: http://code.google.com/p/marlon-tools/source/browse/tools/dnsproxy/dnsproxy.py

Eu testei em Linux e Mac OS X, mas ainda não no Windows.

Você pode tentar o AngryHosts , que fornece uma maneira de suportar curingas e expressões regulares. Na verdade, é um software de aprimoramento e gerenciamento de arquivos de hosts.
Mais resources podem ser vistos em http://angryhosts.com/features/

Estou usando o DNSChef para fazer isso.

https://thesprawl.org/projects/dnschef/

Você tem que baixar o aplicativo, no Linux ou Mac você precisa de python para executá-lo. O Windows tem seu próprio exe.

Você deve criar um arquivo ini com suas inputs de DNS, por exemplo

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

Então você deve iniciar o aplicativo dns com privilégios de administrador

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

ou no windows

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

Finalmente você precisa configurar como seu único DNS seu ambiente de host local (rede, interface, dns ou similar ou no linux /etc/resolv.conf).

É isso aí

Eu fiz essa ferramenta simples para tomar o lugar dos hosts. Expressões regulares são suportadas. https://github.com/stackia/DNSAgent

Uma configuração de amostra:

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

Não consegui encontrar uma proibição por escrito, mas por convenção, o arquivo de hosts do Windows segue de perto o arquivo de hosts do UNIX e você não pode colocar referências de nome de host de caractere curinga nesse arquivo.

Se você ler a página man, ele diz:

 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 

Embora diga,

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

isso não é verdade de um nível prático.

Basicamente, o código que olha para o arquivo / etc / hosts não suporta uma input curinga.

A solução é criar todas as inputs com antecedência, talvez use um script para colocar algumas centenas de inputs de uma só vez.

@petah e acrílico DNS Proxy é a melhor resposta, e no final ele faz referência à capacidade de fazer multi-site usando um Apache que @jeremyasnyder descreve um pouco mais abaixo …

… no entanto, no nosso caso, estamos testando um sistema de hospedagem multilocatário e, portanto, a maioria dos domínios que desejamos testar vai para o mesmo virtualhost , enquanto alguns outros são direcionados para outro local.

Então, no nosso caso, você simplesmente usa curingas regex na diretiva ServerAlias , assim …

 ServerAlias *.foo.local 

Aqui está a configuração total para aqueles que tentam realizar o objective (curinga no ambiente de desenvolvimento, ou seja, XAMPP – este exemplo assume todos os sites apontando para a mesma base de código)

arquivo hosts (adicionar uma input)

arquivo:% SystemRoot% \ system32 \ drivers \ etc \ hosts

 127.0.0.1 example.local 

Configuração do httpd.conf (habilitar vhosts)

arquivo: \ XAMPP \ etc \ httpd.conf

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

configuração do httpd-vhosts.conf

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

  ServerAdmin admin@example.local 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  

reiniciar o apache

criar arquivo pac:

salvar como whatever.pac onde quiser e, em seguida, carregar o arquivo na rede do navegador> proxy> auto_configuration settings (recarregar se você alterar isso)

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

Você pode usar echoipdns para isso ( https://github.com/zapty/echoipdns ).

Ao executar o echoipdns local todos os pedidos de subdomínios .local são redirecionados para 127.0.0.1, portanto, qualquer domínio com xyz.local, etc, será resolvido para 127.0.0.1. Você pode usar qualquer outro sufixo, apenas substitua o local pelo nome desejado.

Echoipdns é ainda mais poderoso, quando você quer usar seu url de outras máquinas na rede, você ainda pode usá-lo com configuração zero.

Por exemplo, se o endereço IP da sua máquina é 192.168.1.100, agora você pode usar um nome de domínio xyz.192-168-1-100.local, que sempre será resolvido para 192.168.1.100. Essa mágica é feita pelos echoipdns, olhando o endereço IP na segunda parte do nome do domínio e retornando o mesmo endereço IP na consulta DNS. Você terá que executar os echoipdns na máquina a partir da qual você deseja acessar o sistema remoto.

O echoipdns também pode ser configurado como um proxy DNS autônomo, portanto, basta apontar para esse DNS. Agora, você pode usar todos os benefícios acima sem executar um comando especial todas as vezes, e até mesmo usá-lo em dispositivos móveis.

Então, essencialmente, isso simplifica o desenvolvimento de DNS baseado em domínio curinga para ambiente local e de equipe.

O echoipdns funciona no Mac, Linux e Windows.

NOTA: Eu sou autor de echoipdns.

Você pode usar um cliente DNS dynamic, como http://www.no-ip.com . Então, com um servidor DNS externo CNAME * .mydomain.com para mydomain.no-ip.com.

Embora você não possa adicionar um caractere curinga como esse, você pode adicionar a lista completa de sites que você precisa, pelo menos para testes, que funciona bem o suficiente para mim, no seu arquivo de hosts, basta adicionar:

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

Já o apache escuta em muitas portas também é uma alternativa.