virtualhost配置 - Windows主机文件中的通配符




virtualhost是什么 (13)

我想设置我的本地开发机器,以便对*.local任何请求都重定向到localhost 。 这个想法是,当我开发多个站点时,我只需将虚拟主机添加到名为site1.localsite2.local等的Apache,并将它们全部解析为localhost ,而Apache则相应地为其他站点提供服务。

我在Windows XP上。

我试着添加

127.0.0.1       *.local

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

127.0.0.1       .local

这两者似乎都不起作用。

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

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


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

...然而,在我们的案例中,我们正在测试一个多租户托管系统,所以我们想要测试的大多数域名都转到同一个virtualhost ,而其他几个域名则转向别处。

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

ServerAlias *.foo.local

为了增加已有的伟大建议, 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

(指定非回送地址的能力对于在无法访问主机文件的iOS设备上测试网站非常棒。)

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


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

通过运行echoipdns local .local子域的所有请求都会被重定向到127.0.0.1,因此任何使用xyz.local等的域都将解析为127.0.0.1。 你可以使用任何其他后缀,也可以用你想要的名字替换local。

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

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

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

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

echoipdns适用于Mac,Linux和Windows。

注意:我是echoipdns的作者。


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


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


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


我不认为这是可能的。

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

更新:请检查下一个答案和对此答案的评论。 这个答案是6岁,不再正确。


我们在我们的本地DNS服务器中使用通配符DNS工作:添加一条类似于*.local -> 127.0.0.1A记录

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

因此, *.localhost.int会解析为网络上每个人的127.0.0.1 ,并且所有开发人员的配置文件设置将“正常工作”,如果端点挂起该子域,例如site1.localhost.intsite2.localhost.int这是几乎是我们介绍的方案。

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


我发现一篇关于使用Windows主机文件的帖子,其中还提到“不允许使用通配符”。

在过去,我刚刚将其他条目添加到hosts文件中,因为(如前所述),当您已经编辑Apache配置文件时,没有多少额外的工作。


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

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

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

解决方法是预先创建所有条目,也许使用脚本一次输入几百条条目。


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

示例配置:

[
    {
        "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"
    }
]

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


要回答你的问题,你不能在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/





virtual-hosts