通配符的,在一个窗户主的文件
-
02-07-2019 - |
题
我想要设置我的地方发展机,所以,任何要求 *.local
重定向到 localhost
.这个想法是,作为我发展的多个站点,我可以加入虚拟主机,阿帕奇叫 site1.local
, site2.local
等等,并且有他们所有决心 localhost
, 同时Apache提供一个不同的网站。
我在Windows XP。
我想加入
127.0.0.1 *.local
我 c:\windows\system32\drivers\etc\hosts
文件中,还试图:
127.0.0.1 .local
无论这似乎工作。
我知道我可以在不同的口号,但这是一个痛苦的,因为它是很难记住,它的港口。
我不想要设置一个当地DNS server或任何硬,任何建议?
解决方案
丙烯酸DNS代理(自由开放源)做的工作。它创建一个代理DNS server(在你自己的计算机)以其自己的主人的文件。主文件的接受通配符。
下载从官方网站
http://mayakron.altervista.org/support/browse.php?path=Acrylic&name=Home
配置丙烯酸DNS代理
配置丙烯酸DNS代理、安装它从上述链路后,转到:
- 开始
- 程序
- 丙烯酸DNS代理
- Config
- 编辑自定义的主文件(文件AcrylicHosts.txt)
添加以下条线上结束该文件:
127.0.0.1 *.localhost
127.0.0.1 *.local
127.0.0.1 *.lc
重新启动的丙烯酸DNS代理服务:
- 开始
- 程序
- 宣纸水墨DNS代理
- Config
- 重新启动服务丙烯酸
你也会需要调整DNS设置在你的网络界面的设置:
- 开始
- 控制面板
- 网络和互联网
- 网络的连接
- 本地区的连接性能
- TCP/IPv4
设置"采用以下DNS server地址":
Preferred DNS Server: 127.0.0.1
如果你然后把这个回答与jeremyasnyder的答复(使用 VirtualDocumentRoot
)然后可以自动设置域/virtual 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 /中的页面。
我认为不可能。
每次添加新站点和位置时,您都必须修改apache virtualroot条目,因此将新名称同步到Windows vhost文件并不是一件大事。
更新:请检查下一个答案以及对此答案的评论。这个答案是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。
我发现了一篇关于使用Windows主机文件的文章,该文章也说<! >“不允许使用通配符。<!>”
过去,我刚刚将其他条目添加到hosts文件中,因为(如前所述),当您编辑apache配置文件时,这并没有那么多额外的工作。
运行<!>“ipconfig / flushdns <!>”时,编辑hosts文件不那么痛苦。从Windows命令提示符,而不是重新启动计算机。
您可以与网络管理员讨论为您设置域名(例如'evilpuppetmaster.hell')并在其中使用通配符,以便所有内容(* .evilpuppetmaster.hell')解析为您的IP
我们在本地DNS服务器中使用通配符DNS工作:添加A
记录,例如*.local -> 127.0.0.1
我认为您的网络设置需要在网络上的计算机的域后缀搜索列表中具有所选的域后缀,因此您可能希望将.local
替换为您公司的内部域(例如.int
)和然后添加一个类似.localhost.int
的子域,以明确它的用途。
所以*.localhost.int
会解析为网络上的每个人127.0.0.1
,所有开发人员的配置文件设置都会<!>;只需要工作<!>“;如果端点挂起该子域,例如site1.localhost.int
,site2.localhost.int
这几乎就是我们推出的方案。
dnsmasq 也看起来不错,但我还没有尝试过: http://ihaveabackup.net/2012/06/ 28 /使用-通配符-内式主机文件/
我在Python中编写了一个简单的dns代理。它将读取/ etc / hosts中的通配符条目。请参阅此处: http://code.google。 COM / p /马龙工具/源极/浏览/工具/代理(DNSProxy)/ dnsproxy.py
我已在Linux <!>放大器中测试过; Mac OS X,但尚未在Windows中使用。
您可以尝试 AngryHosts ,它提供了一种支持通配符和正则表达式的方法。实际上,它是一个主机文件增强和管理软件。
@ http://angryhosts.com/features/
我正在使用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中)。
就是这样
我制作了这个简单的工具来代替主机。支持正则表达式。 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"
}
]
我找不到写入禁令,但按照惯例,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文件的代码不支持通配符条目。
解决方法是提前创建所有条目,也许使用脚本一次放置几百个条目。
@petah和Acrylic DNS Proxy是最好的答案,最后他引用了使用Apache进行多站点的能力,@ jeremyasnyder进一步说明了这一点......
...但是,在我们的案例中,我们正在测试一个多租户托管系统,因此我们想要测试的大多数域转到相同的virtualhost
,而其他几个是定向的别处。
所以在我们的例子中,你只需在ServerAlias
指令中使用正则表达式通配符,就像这样......
ServerAlias *.foo.local
以下是尝试完成目标的人的总配置(开发环境中的通配符,即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";
}
您可以使用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的作者。
使用丙烯酸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;
}
}
添加到Acrylic主机文件127.0.0.1 example.com *.example.com
并重新启动Acrylic服务。
$ branch - 您的子域名。
设置而不是 root / var / www / html / $ branch / public; 您的项目路径
您可以使用动态DNS客户端,例如 http://www.no-ip.com 。然后,使用外部DNS服务器CNAME * .mydomain.com到mydomain.no-ip.com。
虽然你不能添加这样的通配符,但你可以添加你需要的完整网站列表,至少对于测试来说,这对你来说很有效,在你的主机文件中你只需要添加:
127.0.0.1 site1.local
127.0.0.1 site2.local
127.0.0.1 site3.local
...