Windows主机文件中的通配符

我想设置我的本地开发机器,以便任何*.local请求被redirect到localhost 。 这个想法是,当我开发多个站点时,我可以将虚拟主机添加到名为site1.localsite2.local等的Apache,并将它们全部parsing为localhost ,而Apache则相应地提供不同的站点。

我在Windows XP上。

我尝试添加

 127.0.0.1 *.local 

到我的c:\windows\system32\drivers\etc\hosts文件,也试过了:

 127.0.0.1 .local 

这两者似乎都不起作用。

我知道我可以将它们设置在不同的端口号上,但这是一个痛苦,因为很难记住哪个端口是哪个端口号。

我不想要设置本地DNS服务器或任何困难,有什么build议吗?

压克力DNS代理(免费,开源)完成这项工作。 它使用自己的主机文件创build代理DNS服务器(在您自己的计算机上)。 主机文件接受通配符。

从官方网站下载

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

configuration丙烯酸DNS代理

要configuration丙烯酸DNS代理,请从上面的链接安装,然后转到:

  1. 开始
  2. 程式
  3. 压克力DNS代理
  4. configuration
  5. 编辑自定义主机文件(AcrylicHosts.txt)

在文件末尾添加下面的行:

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

重新启动亚克力DNS代理服务:

  1. 开始
  2. 程式
  3. Acrilic DNS代理
  4. configuration
  5. 重新启动亚克力服务

您还需要在networking界面设置中调整您的DNS设置:

  1. 开始
  2. 控制面板
  3. networking和互联网
  4. networking连接
  5. 本地连接属性
  6. TCP / IPv4的

设置“使用下面的DNS服务器地址”:

 Preferred DNS Server: 127.0.0.1 

如果你把这个答案和jeremyasnyder的答案(使用VirtualDocumentRoot )结合起来,你可以通过创build一个目录来自动设置域名/虚拟主机。

要回答你的问题,你不能在Windows下的hosts文件中使用通配符。

但是,如果您只想更改hosts文件以使新站点正常工作….您可以像这样configuration您的Apache,而且您不必继续编辑它的configuration:

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 

然后创build目录c:\ xampp \ sites \ dev \ test,并将必要的文件放在那里,它就可以工作。

另一个select是使用apache.conf中的<Directory>标记并引用http:// localhost / project /中的页面 。

我不认为这是可能的。

无论如何,每次添加新的站点和位置时都必须修改apache virtualroot条目,因此将新名称同步到Windows vhost文件并不是一件大事。

更新:请检查下一个答案和这个答案的意见。 这个答案是6岁,不正确了。

我发现了一篇关于使用Windows主机文件的文章 ,上面也写着“不允许使用通配符”。

在过去,我刚刚在hosts文件中添加了额外的条目,因为(如前所述),当你已经在编辑apacheconfiguration文件时,没有多less额外的工作。

从Windows命令提示符处运行“ipconfig / flushdns”,而不是重新启动计算机,编辑主机文件不会太痛苦。

为了增加已经在这里的伟大的build议, 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 

(指定非回送地址的能力对于testing无法访问hosts文件的iOS设备上的站点来说是非常棒的。)

如果将其与其他答案中提到的某些Apacheconfiguration结合使用,则可以使用零设置添加VirtualHosts。

你可以让你的networkingpipe理员为你设置一个域(比如说'evilpuppetmaster.hell')并在那里设置通配符,这样一切(* .evilpuppetmaster.hell')就可以parsing为你的IP

我用Python编写了一个简单的dns代理。 它将读取/ etc / hosts中的通配符条目。 请参阅此处: http : //code.google.com/p/marlon-tools/source/browse/tools/dnsproxy/dnsproxy.py

我已经在Linux和Mac OS X中testing过,但还没有在Windows中testing过。

你可以尝试AngryHosts ,它提供了一种支持通配符和正则expression式的方法。 实际上,这是一个主机文件增强和pipe理软件。
更多的function可以看到@ http://angryhosts.com/features/

我们在我们的本地DNS服务器上使用通配符DNS来工作:添加一个类似于*.local -> 127.0.0.1

我认为你的networking设置将需要在networking上的机器域名后缀search列表中select域名后缀,所以你可能想用你公司的内部域名(例如.int )replace.local ,然后添加一个子域名.localhost.int来清楚它是什么。

所以*.localhost.int将parsing为networking上的每个人127.0.0.1 ,所有开发人员的configuration文件设置将“只是工作”,如果端点挂起该子域,例如site1.localhost.intsite2.localhost.int这是几乎是我们介绍的scheme。

dnsmasq也看起来不错,但我还没有尝试过呢: http : //ihaveabackup.net/2012/06/28/using-wildcards-in-the-hosts-file/

我正在使用DNSChef来做到这一点。

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

你必须下载应用程序,在Linux或Mac你需要python来运行它。 Windows有自己的exe。

例如,您必须创build一个带有dns条目的ini文件

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

然后,您必须以pipe理员权限启动dns应用程序

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

或在窗口中

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

最后,您需要将您的本地主机环境(networking,接口,dns或类似的或Linux /etc/resolv.conf中)设置为唯一的DNS。

而已

我用这个简单的工具代替了主机。 正则expression式被支持。 https://github.com/stackia/DNSAgent

示例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" } ] 

我找不到写入禁止,但按照惯例,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. 

从实际的angular度来看这是不正确的。

基本上,查看/ etc / hosts文件的代码不支持通配符条目。

解决方法是预先创build所有条目,也许可以使用脚本一次input几百条条目。

@petah和丙烯酸DNS代理是最好的答案,最后他提到了使用Apache的多站点的能力,@jeremyasnyder描述了一个更深入的…

…但是,在我们的情况下,我们正在testing一个多租户主机系统,所以我们想要testing的大多数域名都转到同一个virtualhost ,而其他几个域名则转到其他地方。

所以在我们的例子中,你只需在ServerAlias指令中使用正则expression式通配符,像这样…

 ServerAlias *.foo.local 

这是试图完成目标的总体configuration(在dev环境中的通配符,即XAMPP–这个例子假定所有的站点指向相同的代码库)

hosts文件(添加一个条目)

文件:%SystemRoot%\ system32 \ drivers \ etc \ hosts

 127.0.0.1 example.local 

httpd.confconfiguration(启用虚拟主机)

文件:\ XAMPP \ etc \ httpd.conf

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

httpd-vhosts.confconfiguration

文件: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> 

重启apache

创buildpac文件:

保存为whatever.pac无论你想要的,然后加载浏览器的networking>代理>自动configuration设置(重新加载,如果你改变这个)

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

你可以使用echoipdns( https://github.com/zapty/echoipdns )。

通过echoipdns local运行echoipdns local ,.local子域的所有请求都被redirect到127.0.0.1,因此任何具有xyz.local等的域都将parsing为127.0.0.1。 你可以使用任何其他的后缀,也可以用你想要的名字replacelocal。

Echoipdnsfunction更强大,当你想从networking中的其他机器使用你的url,你仍然可以使用零configuration。

例如,如果你的机器的IP地址是192.168.1.100,你现在可以使用一个域名xyz.192-168-1-100.local,它总是会parsing为192.168.1.100。 这个魔术是由echoipdns通过查看域名第二部分中的IP地址并在DNS查询中返回相同的IP地址来完成的。 你将不得不在你要访问远程系统的机器上运行echoipdns。

echoipdns也可以设置为一个独立的DNS代理,所以只需指向这个DNS,现在就可以使用上述所有优点,而不需要每次运行一个特殊的命令,甚至可以在移动设备上使用它。

所以本质上这简化了本地以及团队环境中基于通配域的DNS开发。

echoipdns适用于Mac,Linux和Windows。

注意:我是echoipdns的作者。

您可以使用dynamicDNS客户端,如http://www.no-ip.com 。 然后,将外部DNS服务器CNAME * .mydomain.com复制到mydomain.no-ip.com。

虽然不能像这样添加通配符,但是您可以添加所需的完整站点列表(至less用于testing),对于我而言,在您的hosts文件中,您只需添加:

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

有许多端口上的apache监听也是一种select。