Windows主机文件中的通配符
我想设置我的本地开发机器,以便任何*.local
请求被redirect到localhost
。 这个想法是,当我开发多个站点时,我可以将虚拟主机添加到名为site1.local
, site2.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代理,请从上面的链接安装,然后转到:
- 开始
- 程式
- 压克力DNS代理
- configuration
- 编辑自定义主机文件(AcrylicHosts.txt)
在文件末尾添加下面的行:
127.0.0.1 *.localhost 127.0.0.1 *.local 127.0.0.1 *.lc
重新启动亚克力DNS代理服务:
- 开始
- 程式
- Acrilic DNS代理
- configuration
- 重新启动亚克力服务
您还需要在networking界面设置中调整您的DNS设置:
- 开始
- 控制面板
- networking和互联网
- networking连接
- 本地连接属性
- 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.int
, site2.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。