我想设置我的本地开发机器,以便任何对*的请求。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文件中使用通配符。

但是,如果您只想更改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/中的页面。

其他回答

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

通过运行echoipdns local,所有对.local子域的请求都被重定向到127.0.0.1,因此任何具有xyz. local子域的域。本地etc将解析为127.0.0.1。您可以使用任何其他后缀,也只是用您想要的名称替换local。

Echoipdns甚至更强大,当你想使用你的url从其他机器在网络中,你仍然可以使用它零配置。

例如,如果你的机器ip地址是192.168.1.100,你现在可以使用一个域名xyz.192-168-1-100。本地的,将始终解析为192.168.1.100。这个魔术是由echoipdns通过查看域名的第二部分中的ip地址,并在DNS查询中返回相同的ip地址来完成的。您必须在要访问远程系统的机器上运行echoipdns。

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

因此,从本质上讲,这简化了本地和团队环境中基于通配符域的DNS开发。

echoipdns适用于Mac、Linux和Windows。

注:我是echoipdns的作者。

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

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

你可以说服你的网络管理员为你设置一个域名(说'evilpuppetmaster.hell'),并在那里使用通配符,这样所有的东西(*.evilpuppetmaster.hell')都解析到你的IP

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

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

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

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

ServerAlias *.foo.local