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?
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 à:
- début
- programmes
- Proxy DNS acrylique
- Config
- 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:
- début
- programmes
- Serveur DNS Acrilic
- Config
- Redémarrez Le Service Acrylique
Vous devrez également ajuster votre DNS configuration des paramètres de votre interface réseau:
- début
- Panneau De Configuration
- réseau et Internet
- Connexions Réseau
- Propriétés De Connexion Au Réseau Local
- 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.
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 / .
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.
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.
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.
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 .
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
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/
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.
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/
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
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"
}
]
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.
@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
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";
}
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.
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.
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
...