我想设置我的本地开发机器,以便任何对*的请求。Local被重定向到localhost。这个想法是,当我开发多个站点时,我只需向Apache添加名为site1的vhosts。地方,site2。让它们都解析到localhost,而Apache则相应地服务于不同的站点。

我用的是Windows XP。

我试着加上

127.0.0.1       *.local

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

127.0.0.1       .local

这两种方法似乎都不管用。

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

我不想设置本地DNS服务器,有什么建议吗?


当前回答

我发现一个关于使用Windows主机文件的帖子也说“不允许通配符”。

在过去,我只是将额外的条目添加到hosts文件中,因为(如前所述),当您已经在编辑apache配置文件时,并没有那么多额外的工作。

其他回答

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

... 然而,在我们的例子中,我们正在测试一个多租户托管系统,因此我们想要测试的大多数域都指向同一个虚拟主机,而其他一些域则指向其他地方。

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

ServerAlias *.foo.local

我找不到书面禁止,但按照惯例,Windows hosts文件紧跟UNIX hosts文件,不能在该文件中放入通配符主机名引用。

如果你阅读手册页,它说:

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.

从实践层面来看,这是不正确的。

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

解决方法是提前创建所有的条目,可能使用一个脚本来一次性放置几百个条目。

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

但是,如果您只想更改hosts文件以使新站点工作....你可以这样配置你的Apache,你不需要一直编辑它的配置:

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

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

另一种选择是在apache.conf中使用<Directory>标记,并引用http://localhost/project/中的页面。

丙烯酸DNS代理(免费,开源)的工作。它用自己的hosts文件创建一个代理DNS服务器(在您自己的计算机上)。hosts文件接受通配符。

官方网站下载

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

配置亚克力DNS代理

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

开始 项目 丙烯酸DNS代理 配置 编辑定制主机文件(AcrylicHosts.txt)

在文件末尾添加如下代码:

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

重新启动丙烯酸DNS代理服务:

开始 项目 Acrilic DNS代理 配置 重启亚克力服务

您还需要在网络接口设置中调整DNS设置:

开始 控制面板 网络与互联网 网络连接 本地连接属性 TCP / IPv4

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

Preferred DNS Server: 127.0.0.1

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

我们在本地DNS服务器中使用通配符DNS:添加一个A记录,比如*。Local -> 127.0.0.1

我认为你的网络设置需要在网络上机器的域名后缀搜索列表中有所选择的域名后缀,所以你可能想用你公司的内部域名(例如.int)取代.local,然后添加一个子域名,如.localhost.int,以明确它的用途。

因此,*.localhost.int将为网络上的每个人解析为127.0.0.1,如果端点挂起子域(例如site1.localhost.int, site2.localhost.int),则所有开发人员的配置文件设置将“正常工作”。

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