Windows主机文件中的通配符

时间:2008-09-26 07:35:44

标签: windows apache dns hosts virtual-hosts

我想设置我的本地开发计算机,以便将*.local的任何请求重定向到localhost。我的想法是,当我开发多个站点时,我可以将vhost添加到名为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服务器或任何困难的任何建议?

20 个答案:

答案 0 :(得分:412)

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

从官方网站下载

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

配置丙烯酸DNS代理

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

  1. 开始
  2. 程序
  3. 丙烯酸DNS代理
  4. 配置
  5. 编辑自定义主机文件(AcrylicHosts.txt)
  6. 在文件末尾添加以下行:

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

    重新启动Acrylic DNS代理服务:

    1. 开始
    2. 程序
    3. Acrilic DNS代理
    4. 配置
    5. 重新启动亚克力服务
    6. 您还需要在网络接口设置中调整DNS设置:

      1. 开始
      2. 控制面板
      3. 网络和互联网
      4. 网络连接
      5. 本地连接属性
      6. TCP / IPv4的
      7. 设置“使用以下DNS服务器地址”:

        Preferred DNS Server: 127.0.0.1
        

        如果您将此答案与jeremyasnyder的答案(使用VirtualDocumentRoot)结合起来,则可以通过创建目录自动设置域/虚拟主机。

答案 1 :(得分:81)

要回答您的问题,您不能在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/中的页面。

答案 2 :(得分:30)

我认为不可能。

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

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

答案 3 :(得分:5)

为了添加这里已有的好建议,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。

答案 4 :(得分:4)

我发现了一篇关于Using the Windows Hosts File的帖子,其中也说“不允许使用通配符。”

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

答案 5 :(得分:4)

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

答案 6 :(得分:3)

您可以与网络管理员讨论为您设置域名(例如'evilpuppetmaster.hell')并在其中使用通配符,以便所有内容(* .evilpuppetmaster.hell')解析为您的IP

答案 7 :(得分:3)

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

我认为您的网络设置需要在网络上的计算机的域后缀搜索列表中具有所选的域后缀,因此您可能希望将.local替换为您公司的内部域(例如{{1}然后添加一个类似.int的子域名,以明确它的用途。

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

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

答案 8 :(得分:2)

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

我已经在Linux&amp; Mac OS X,但尚未在Windows中使用。

答案 9 :(得分:2)

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

可以看到更多功能

答案 10 :(得分:2)

我制作了这个简单的工具来代替主机。支持正则表达式。 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"
    }
]

答案 11 :(得分:2)

我使用DNSChef来做到这一点。

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

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

您必须使用dns条目创建一个ini文件,例如

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

然后,您必须使用管理员权限启动DNS应用程序

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

或在Windows中

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

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

那是

答案 12 :(得分:0)

这可以使用Pi-Hole完成,只需编辑“ / etc / hosts”并重新启动dns服务即可。

nano /etc/hosts
pihole restartdns

示例:

127.0.1.1       raspberrypi
192.168.1.1     w1.dev.net
192.168.1.2     w2.dev.net
192.168.1.3     w3.dev.net

答案 13 :(得分:0)

使用Acrylic DNS代理配置nginx config自动子域

  

您的nginx站点文件夹的auto.conf文件

after_create

添加到Acrylic主机文件server { listen 80; server_name ~^(?<branch>.*)\.example\.com; root /var/www/html/$branch/public; index index.html index.htm index.php; charset utf-8; location / { try_files $uri $uri/ /index.php$is_args$args; } location = /favicon.ico { access_log off; log_not_found off; } location = /robots.txt { access_log off; log_not_found off; } error_log /var/log/nginx/$branch.error.log error; sendfile off; client_max_body_size 100m; location ~ \.php$ { try_files $uri /index.php =404; fastcgi_pass php-fpm:9000; fastcgi_index index.php; fastcgi_buffers 16 16k; fastcgi_buffer_size 32k; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; } location ~ /\.ht { deny all; } } ,然后重新启动Acrylic服务。 $ branch -您的子域名。

设置而不是 root / var / www / html / $ branch / public; 您的项目路径

答案 14 :(得分:0)

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

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

Echoipdns功能更强大,当您想要使用网络中其他机器的网址时,您仍然可以零配置使用它。

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

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

基本上,这简化了基于通配符域的DNS开发,适用于本地和团队环境。

echoipdns适用于Mac,Linux和Windows。

注意:我是echoipdns的作者。

答案 15 :(得分:0)

以下是尝试完成目标的人的总配置(开发环境中的通配符,即XAMPP - 此示例假设所有站点都指向相同的代码库)

hosts文件(添加条目)

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

127.0.0.1   example.local

httpd.conf配置(启用vhosts)

file:\ XAMPP \ etc \ httpd.conf

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

httpd-vhosts.conf配置

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

创建pac文件:

在任何地方保存为whatever.pac,然后在浏览器的网络中加载文件&gt;代理&gt; auto_configuration设置(如果更改则重新加载)

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

答案 16 :(得分:0)

@petah和丙烯酸DNS代理是最好的答案,最后他引用了使用Apache进行多站点的能力,@ jeremyasnyder进一步描述了......

...但是,在我们的案例中,我们正在测试一个多租户托管系统,因此我们要测试的大多数域转到同一个virtualhost,而其他几个被引导到别处。

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

ServerAlias *.foo.local

答案 17 :(得分:0)

我找不到写入禁令,但按照惯例,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文件的代码不支持通配符条目。

解决方法是提前创建所有条目,也许使用脚本一次放置几百个条目。

答案 18 :(得分:-1)

虽然您无法添加这样的通配符,但您可以添加所需的网站的完整列表,至少对于测试而言,这对我来说非常有效,在您的主机文件中,您只需添加:

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

答案 19 :(得分:-1)

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