Caractères génériques dans un fichier hosts Windows

Je veux configurer ma machine de développement locale afin que toutes les demandes de *.local soient redirigées vers localhost. L'idée est que lorsque je développe plusieurs sites, je peux simplement ajouter des vhosts à Apache appelé site1.local, site2.local etc, et les ont tous résolus à localhost, alors Qu'Apache sert un site différent en conséquence.

Je suis sur Windows XP.

J'ai essayé d'ajouter

127.0.0.1       *.local

À mon fichier c:windowssystem32driversetchosts, également essayé:

127.0.0.1       .local

Aucun d'entre eux ne semble fonctionner.

Je sais que je peux les installer différents numéros de port, mais c'est une douleur car il est difficile de se rappeler quel port est qui.

Je ne veux pas avoir à configurer un serveur DNS local ou quelque chose de dur, des suggestions?

264
demandé sur Simon East 2008-09-26 11:35:43

19 réponses

Acrylic DNS Proxy (gratuit, open source) fait le travail. Il crée un serveur DNS proxy (sur votre propre ordinateur) avec son propre fichier hosts. Le fichier hosts accepte les caractères génériques.

Télécharger depuis le site officiel

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

Configuration du Proxy DNS acrylique

Pour configurer le Proxy DNS acrylique, installez-le à partir du lien ci-dessus, puis allez à:

  1. début
  2. programmes
  3. Proxy DNS acrylique
  4. Config
  5. Modifier Le Fichier Hosts Personnalisé (AcrylicHosts.txt)

Ajoutez les lignes suivantes à la fin du fichier:

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

Redémarrez le Service Proxy DNS acrylique:

  1. début
  2. programmes
  3. Serveur DNS Acrilic
  4. Config
  5. Redémarrez Le Service Acrylique

Vous devrez également ajuster votre DNS configuration des paramètres de votre interface réseau:

  1. début
  2. Panneau De Configuration
  3. réseau et Internet
  4. Connexions Réseau
  5. Propriétés De Connexion Au Réseau Local
  6. TCP / IPv4

Définir "Utiliser l'adresse de serveur DNS suivante":

Preferred DNS Server: 127.0.0.1

si vous combinez ensuite cette réponse avec la réponse de jeremyasnyder (en utilisant VirtualDocumentRoot), Vous pouvez ensuite configurer automatiquement les domaines / hôtes virtuels en créant simplement un répertoire.

401
répondu Petah 2014-04-22 13:27:58

Pour répondre à votre question, vous ne pouvez pas utiliser de caractères génériques dans le fichier hosts sous Windows.

Toutefois, si vous souhaitez modifier uniquement le fichier hosts pour que de nouveaux sites fonctionnent.... vous pouvez configurer votre Apache comme ceci et vous n'avez pas besoin de continuer à éditer sa configuration:

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

Fondamentalement, un résumé rapide basé sur ma configuration, ajoutez ce qui suit à votre apache.fichier 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>

Cela me permet d'ajouter une entrée comme:

127.0.0.1       test.dev

Puis créez le répertoire, c:\xampp\sites\dev\test et placez les fichiers nécessaires là-dedans et cela fonctionne juste.

L'autre option consiste à utiliser les balises <Directory> dans apache.conf et référencer les pages de http://localhost/project / .

78
répondu jeremyasnyder 2008-11-07 13:42:16

Je ne pense pas que ce soit possible.

Vous devez de toute façon Modifier les entrées d'apache virtualroot chaque fois que vous ajoutez un nouveau site et un nouvel emplacement, donc ce n'est pas un gros travail de synchroniser le nouveau nom dans le fichier Windows vhost.

Mise à jour: veuillez vérifier la réponse suivante et les commentaires sur cette réponse. Cette réponse a 6 ans et n'est plus correcte.

29
répondu Biri 2014-08-31 08:34:11

J'ai trouvé un message sur en utilisant le fichier Windows Hosts qui dit aussi " aucun caractère générique n'est autorisé."

Dans le passé, je viens d'ajouter les entrées supplémentaires au fichier hosts, car (comme indiqué précédemment), ce n'est pas beaucoup de travail supplémentaire lorsque vous modifiez déjà le fichier de configuration apache.

4
répondu Kevin Hakanson 2008-09-27 23:58:24

La modification du fichier hosts est moins pénible lorsque vous exécutez "ipconfig / flushdns" à partir de l'invite de commande windows, au lieu de redémarrer votre ordinateur.

4
répondu Joe 2010-10-17 17:43:54

Pour ajouter aux grandes suggestions déjà ici, XIP.IO est un serveur DNS Générique fantastique qui est accessible au public.

      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

(la possibilité de spécifier des adresses non bouclées est fantastique pour tester des sites sur des appareils iOS où vous ne pouvez pas accéder à un fichier hosts.)

Si vous combinez cela avec une partie de la configuration Apache mentionnée dans d'autres réponses, vous pouvez potentiellement ajouter VirtualHosts avec zéro configuration .

4
répondu Simon East 2015-03-23 01:26:10

Vous pouvez demander à votre administrateur réseau de configurer un domaine pour vous (disons 'evilpuppetmaster.hell') et ayant le caractère générique là pour que tout (*.evilpuppetmaster.hell') résout à votre adresse IP

3
répondu Stu Thompson 2008-09-26 08:02:56

Nous avons ceci fonctionnant en utilisant le DNS générique dans notre serveur DNS local: ajoutez un A record quelque chose comme *.local -> 127.0.0.1

Je pense que vos paramètres réseau devront avoir le suffixe de domaine choisi dans la liste de recherche de Suffixe de domaine pour les machines sur le réseau, vous pouvez donc remplacer .local par le domaine interne de votre entreprise (par exemple .int), puis Ajouter un sous-domaine comme .localhost.int pour préciser à quoi il sert.

Donc {[5] } résoudrait à 127.0.0.1 pour tout le monde sur le réseau, et les paramètres de fichier de configuration pour tous les développeurs "fonctionneraient" si les points de terminaison bloquaient ce sous-domaine, par exemple site1.localhost.int, site2.localhost.int C'est à peu près le schéma que nous avons introduit.

Dnsmasq a également l'air bien, mais je ne l'ai pas encore essayé: http://ihaveabackup.net/2012/06/28/using-wildcards-in-the-hosts-file/

3
répondu Matthew Skelton 2013-07-23 13:46:18

J'ai écrit un simple proxy DNS en Python. Il lira les entrées génériques dans/etc / hosts. Voir ici: http://code.google.com/p/marlon-tools/source/browse/tools/dnsproxy/dnsproxy.py

J'ai testé sous Linux et Mac OS X, mais pas encore sous Windows.

2
répondu marlonyao 2011-05-02 09:32:31

Vous pouvez essayer AngryHosts , qui a fourni un moyen de prendre en charge les caractères génériques et les expressions régulières. En fait, c'est un logiciel d'amélioration et de gestion de fichiers hosts.
Plus de fonctionnalités peuvent être vues @ http://angryhosts.com/features/

2
répondu Topro 2012-03-05 13:41:42

J'utilise DNSChef pour le faire.

Https://thesprawl.org/projects/dnschef/

Vous devez télécharger L'application, sous Linux ou Mac, vous avez besoin de python pour l'exécuter. Windows ont leur propre exe.

, Vous devez créer un fichier ini avec vos entrées dns, par exemple

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

Ensuite, vous devez lancer l'application dns avec des privilèges d'administrateur

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

Ou dans windows

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

Enfin, vous devez configurer comme votre seul DNS votre environnement hôte local (réseau, interface, dns ou similaire ou dans linux /etc/resolv.conf).

C'est tout

2
répondu casivaagustin 2014-02-28 14:07:53

J'ai fait cet outil simple pour prendre la place des hôtes. Les expressions régulières sont prises en charge. https://github.com/stackia/DNSAgent

Un exemple de configuration:

[
    {
        "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
répondu Stackia 2015-03-04 04:04:29

Je n'ai pas trouvé d'interdiction par écrit, mais par convention, le fichier hosts Windows suit de près le fichier hosts UNIX, et vous ne pouvez pas mettre de références de nom d'hôte génériques dans ce fichier.

Si vous lisez la page de manuel, il est dit:

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

Bien qu'il soit dit,

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

Ce n'est pas vrai d'un point de vue pratique.

Fondamentalement, le code qui regarde le fichier /etc/hosts ne prend pas en charge une entrée générique.

La solution consiste à créer toutes les entrées dans l'avance, peut-être utiliser un script pour mettre quelques centaines d'entrées à la fois.

0
répondu benc 2008-12-05 00:48:06

@petah et Acrylic DNS Proxy est la meilleure réponse, et à la fin il fait référence à la possibilité de faire multi-site en utilisant un Apache que @jeremyasnyder décrit un peu plus bas...

... cependant, dans notre cas, nous testons un système d'hébergement multi-locataires et donc la plupart des domaines que nous voulons tester vont au même virtualhost, tandis que quelques autres sont dirigés ailleurs.

Donc, dans notre cas, vous utilisez simplement des caractères génériques regex dans la directive ServerAlias, comme ceci...

ServerAlias *.foo.local
0
répondu oucil 2014-01-16 04:50:40

Voici la configuration totale pour ceux qui essaient d'atteindre l'objectif (jokers dans l'environnement dev ie, XAMPP -- cet exemple suppose tous les sites pointant vers la même base de code)

Fichier Hosts (ajouter une entrée)

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

127.0.0.1   example.local

Httpd.configuration conf (activer vhosts)

Fichier: \ XAMPP \ etc \ httpd.conf

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

Httpd-vhosts.configuration conf

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

<VirtualHost *:80>
    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
</VirtualHost>

Redémarrez apache

Créer un fichier pac:

Enregistrer comme quoi que ce soit.pac où vous voulez, puis chargez le fichier dans les paramètres réseau>proxy>auto_configuration du navigateur (rechargez si vous modifiez cela)

function FindProxyForURL(url, host) {
  if (shExpMatch(host, "*example.local")) {
    return "PROXY example.local";
  }
  return "DIRECT";
}
0
répondu Daniel Jordi 2014-08-19 19:56:09

Vous pouvez utiliser echoipdns pour ce (https://github.com/zapty/echoipdns).

En exécutant echoipdns local Toutes les requêtes pour .les sous-domaines locaux sont redirigés vers 127.0.0.1, donc tout domaine avec xyz.local etc se résoudra à 127.0.0.1. Vous pouvez utiliser n'importe quel autre suffixe aussi simplement remplacer local par le nom que vous voulez.

Echoipdns est encore plus puissant, lorsque vous voulez utiliser votre url à partir d'autres ordinateurs en réseau, vous pouvez toujours l'utiliser avec zéro configuration.

Par exemple si votre adresse ip de l'appareil est 192.168.1.100, vous pouvez maintenant utiliser un nom de domaine xyz.192-168-1-100.local qui résoudra toujours à 192.168.1.100. Cette magie est faite par les echoipdns en regardant l'adresse ip dans la deuxième partie du nom de domaine et en retournant la même adresse ip sur la requête DNS. Vous devrez exécuter les echoipdns sur la machine à partir de laquelle vous souhaitez accéder au système distant.

Echoipdns peut également être configuré en tant que proxy DNS autonome, donc en pointant simplement vers ce DNS, vous pouvez maintenant utiliser tous les avantages ci-dessus sans exécuter une commande spéciale à chaque fois, et vous pouvez même l'utiliser à partir d'appareils mobiles.

Donc, essentiellement, cela simplifie le développement DNS basé sur un domaine générique pour l'environnement local ainsi que l'environnement d'équipe.

Echoipdns fonctionne sur Mac, Linux et Windows.

NOTE: je suis auteur pour echoipdns.

0
répondu arva 2015-01-09 10:12:45

Vous pouvez utiliser un client DNS dynamique tel que http://www.no-ip.com . Ensuite, avec un serveur DNS externe CNAME *.mydomain.com pour mydomain.no-ip.com.

-1
répondu 2009-04-30 21:03:48

Bien que vous ne puissiez pas ajouter un caractère générique comme ça, vous pouvez ajouter la liste complète des sites dont vous avez besoin, au moins pour les tests, qui fonctionne assez bien pour moi, dans votre fichier hosts, vous ajoutez simplement:

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

-1
répondu BlackTigerX 2013-02-22 00:16:26

Avoir Apache listen sur de nombreux ports est également une alternative.

-3
répondu 2009-06-16 21:35:57