在Windows主机文件通配符(Wildcards in a Windows hosts file)

2019-07-04 22:38发布

我想设置我的地方发展机,以便对任何请求*.local被重定向到localhost 。 这个想法是,我开发多个网站,我可以再补充虚拟主机到Apache叫site1.localsite2.local等,让他们都决心localhost ,而Apache的相应服务于不同的网站。

我在Windows XP上。

我尝试添加

127.0.0.1       *.local

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

127.0.0.1       .local

两者都不似乎工作。

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

我不希望有设置一个本地DNS服务器或其他坚硬的东西,有什么建议?

Answer 1:

亚克力DNS代理(免费,开放源代码)做这项工作。 它创建了自己的hosts文件代理的DNS服务器(您自己的计算机上)。 hosts文件接受通配符。

从官方网站下载

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

配置亚克力DNS代理

配置亚克力DNS代理,从上面的链接安装它,然后去:

  1. 开始
  2. 程式
  3. 亚克力DNS代理
  4. 配置
  5. 编辑自定义HOSTS文件(AcrylicHosts.txt)

添加如下因素线在文件的结尾:

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

重新启动DNS亚克力代理服务:

  1. 开始
  2. 程式
  3. Acrilic DNS代理
  4. 配置
  5. 重新启动亚克力服务

您还需要在你的网络接口设置来调整你的DNS设置:

  1. 开始
  2. 控制面板
  3. 网络和Internet
  4. 网络连接
  5. 本地连接属性
  6. TCP / IPv4的

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

Preferred DNS Server: 127.0.0.1

如果你那么这个答案与jeremyasnyder的回答(用结合VirtualDocumentRoot )然后你可以自动设置域/虚拟主机,只需创建一个目录。



Answer 2:

要回答你的问题,你不能在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 \网站\ dev的\测试,并将在那里所必需的文件,它就可以工作。

另一种选择是使用<Directory>标签的apache.conf并引用来自网页的http://本地主机/项目/ 。



Answer 3:

我不认为这是可能的。

反正你在每次添加一个新的站点和位置的时间来修改Apache virtualroot条目,所以它不是一个大的工作syncronise新名称为Windows虚拟主机文件。

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



Answer 4:

我发现一个帖子关于使用Windows Hosts文件也说“没有通配符是允许的。”

在过去,我刚才说的其他条目的hosts文件,因为(如前面说的),这不是那么多的工作时,你已经在编辑Apache的配置文件。



Answer 5:

编辑hosts文件不太痛苦的,当你从Windows“IPCONFIG / FLUSHDNS”命令提示符,而不是重新启动计算机。



Answer 6:

要添加到很好的建议已经在这里, 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。



Answer 7:

您可以谈谈您的网络管理员将设置你的域(说“evilpuppetmaster.hell”),并具有有通配符让一切(* .evilpuppetmaster.hell')解析为您的IP



Answer 8:

我们有这样的使用在我们的本地DNS服务器通配符DNS工作:添加A记录像*.local -> 127.0.0.1

我认为你的网络设置,将必须对网络上的机器域后缀搜索列表中选择域名后缀,所以你可能需要更换.local与贵公司的内部域(例如.int ),然后添加一个子像.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/



Answer 9:

我已经用Python编写一个简单的DNS代理。 它会读取/ etc / hosts中通配符项目。 在这里看到: http://code.google.com/p/marlon-tools/source/browse/tools/dnsproxy/dnsproxy.py

我已经在Linux和Mac OS X的测试,但尚未在Windows中。



Answer 10:

您可以尝试AngryHosts ,它提供了一种支持通配符和正则表达式。 其实,这是一个hosts文件,增强和管理软件。
更多的功能可以看出@ http://angryhosts.com/features/



Answer 11:

我使用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或相似或在Linux中的/etc/resolv.conf)。

而已



Answer 12:

我做了这个简单的工具来采取主机的地方。 正则表达式的支持。 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"
    }
]


Answer 13:

我找不到书面禁令,但按照惯例,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文件不支持通配符项。

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



Answer 14:

@petah和亚克力DNS Proxy是最好的答案,并在结束时,他引用了做多的网站使用Apache其中@jeremyasnyder描述远一点能力下降......

......然而,在我们的例子中,我们正在测试一个多租户托管制度,我们要测试去一样的,所以virtualhost ,而一对夫妇别人都指向别处。

所以在我们的情况下,您只需使用正则表达式通配符在ServerAlias指令,像这样......

ServerAlias *.foo.local


Answer 15:

这里是为那些试图实现目标的总配置(在开发环境通配符即XAMPP - 这个例子假设所有站点指向同一个代码库)

hosts文件(添加一个条目)

文件:%SYSTEMROOT%\ SYSTEM32 \ DRIVERS \等\主机

127.0.0.1   example.local

httpd.conf配置(启用虚拟主机)

文件:\ XAMPP \等\ httpd.conf文件

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

的httpd-vhosts.conf配置

文件:XAMPP \等\额外\的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然后加载在浏览器的网络>代理> auto_configuration设置的文件(重新加载,如果你改变这一点)

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


Answer 16:

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

通过运行echoipdns local的。本地子域中的所有请求重定向到127.0.0.1,所以用xyz.local等任何域名将解析为127.0.0.1。 你可以使用任何其它后缀也只是局部更换你想要的名字。

Echoipdns更是如虎添翼,当你想用你的网址从网络仍然可以使用零配置使用其他机器。

对于例如如果你的机器的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作者。



Answer 17:

配置与丙烯酸DNS代理配置nginx的子域汽车

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

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;
    }
}

加入丙烯酸hosts文件127.0.0.1 example.com *.example.com ,然后重新启动亚克力服务。 $分支 -你的子域名。

集而不是根在/ var / www / html等/ $分公司/公; 你的项目路径



Answer 18:

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



Answer 19:

虽然你不能添加通配符这样,你可以添加你所需要的,至少在测试网站的完整列表,该作品不够好,我在你的hosts文件,你只需要添加:

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



Answer 20:

对许多端口阿帕奇听也是一种选择。



文章来源: Wildcards in a Windows hosts file