我需要testing我的本地主机上的子域。 如何有效地将*.localhost.com
添加到我的/etc/hosts/
文件中?
如果不可能,我该如何解决这个问题? 我需要在本地服务器上testing通配符子域。 它是一个Django devserver,Django dev服务器可以处理子域吗? 其他一些软件/路由可以给我最终的结果吗?
我用Python编写了一个dns代理。 它将读取/ etc / hosts中的通配符条目。 看到这里: https : //github.com/hubdotcom/marlon-tools/blob/master/tools/dnsproxy/dnsproxy.py
安装dnsmasq (我在我所有的Linux桌面上以DNScaching的方式执行此操作)。 在dnsmasq.conf
添加一行:
address=/localhost.com/127.0.0.1
无法在/etc/hosts
文件中指定通配符。 请明确指定所需的主机名,或者使用适当的规则设置本地名称服务器。
您需要build立一个DNS服务器,并让每个客户端使用它来解决。 服务器本身可以像dnsmasq那样“轻”,或者像BIND一样重。
我个人喜欢创build一个PAC文件,使我的浏览器只使用它。
第1步:创build一个文件,例如: *.proxy.pac*
某处(我使用我的$home
文件夹)
第二步:粘贴这个代码(例子是8000端口):
function FindProxyForURL(url, host) { if (shExpMatch(host, "*localhost")) { return "PROXY localhost:8000"; } return "DIRECT"; }
步骤3 :让浏览器使用这个PAC文件。
Youtube Video for PAC&Firefox
第4步 :现在您可以通过访问来testing您的应用程序: http://mysubdomain.localhost/
第5步:享受:)
你不能在/etc/hosts
使用通配符。
在这里看看如何在OS X上使用BIND,内置但不活动的DNS服务器和Apache完成一个很好的演练。
我整理了一个我的旧项目:
https://github.com/airtonix/avahi-aliases
要求:
使用dnsmasq或python dns代理的优点:
这个基于DNS的解决scheme在我的情况下完美工作,无需安装任何东西: https : //gist.github.com/fedir/04e60d679d5657d1f9f9aa10b3168282 (Mac OSX 10.9)
简短的答案是你没有。 更长的答案是你需要更清楚你想要实现的目标,因为或许有更好的方法,还有一个不同的方法来实现它。
对于networking托pipe(我从来没有见过使用其他方式)是在DNS中结合虚拟主机感知的Web服务器。 有关通配DNSlogging (维基百科)的更多信息,以及使用bind和Apache 进行Apache和Bind for Linux的Wildcard托pipe的文章。
最糟糕的是,你可以使用本地的DNS服务器。
如果你想在NetworkManager
使用dnsmasq
,你可以(甚至必须)通过添加NetworkManager
来启动dnsmasq
dns=dnsmasq
到/etc/NetworkManager/NetworkManager.conf
。 然后dnsmasqconfiguration进入/etc/NetworkManager/dnsmasq.conf
或/etc/NetworkManager/dnsmasq.d/
resp。
此主题的一个常见任务是将目录映射到子域。 一个非常直接的方法是将基于目录的条目自动附加到hosts文件中:
#!的/ usr / bin中/python import操作系统 hostsFile = open(“/ etc / hosts”,“a +”); lines = hostsFile.readlines() for os.listdir('/ opt / subdomainDirs')中的fileName: entryExists = False 对于行: 如果文件名在行: entryExists = True 如果不是entryExists: hostsFile.write(“127.0.0.1”+ fileName +“.localhost \ n”);
感谢tschundeee对于我认为是这个问题的最终答案,希望我可以评论,但这里是完成原始目标的所有configuration(通配符都指向相同的代码库 – 安装任何东西,开发环境即,XAMPP)
文件:/ etc / hosts(非Windows)
127.0.0.1 example.local
文件:/XAMPP/etc/httpd.conf
# Virtual hosts Include etc/extra/httpd-vhosts.conf
文件:XAMPP / etc / extra / httpd-vhosts.conf
<VirtualHost *:80> ServerAdmin [email protected] 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
保存为whatever.pac无论你想要的,然后加载浏览器的networking>代理>自动configuration设置(重新加载,如果你改变这个)
function FindProxyForURL(url, host) { if (shExpMatch(host, "*example.local")) { return "PROXY example.local"; } return "DIRECT"; }
dnsmasq为我工作,除了我不得不采取一些额外的步骤。
这是完整的程序:
在/etc/resolv.conf
添加以下行
nameserver 127.0.0.1
/etc/dnsmasq.conf
添加到/etc/dnsmasq.conf
listen-address=127.0.0.1 address=/localhost.localdomain/127.0.0.1 address=/localhost/127.0.0.1
重新启动dnsmasq
简短的回答:
你的/ etc / hosts /文件不会让你使用通配符或端口号。 您将需要为每个子域创build一个条目