我可以访问 Fog Creek 的网站,设置一个新帐户,他们会立即为我分配一个 URL,例如“mycompany.fogbugz.com”(其中“mycompany”是我编造的,而不是 Fog Creek 分配的某个值)。我可以对 Beanstalk 和许多其他供应商做同样的事情。我一直在谷歌上搜索,试图弄清楚这到底是如何工作的。
1:在上面的例子中,除了设置普通的“www.foo.com”域名之外,“mycompany.fogbugz.com”是否以某种特殊方式在 DNS 中设置?
2:假设 Fog Creek 使用 Tomcat(我确信这不是真的,但假设它是),他们是否可能在其服务器上创建 tomcat/webapps/mycompany 子目录?或者有更简单的方法来处理这个问题?
我显然不是 DNS 或 TC 专家。任何见解都值得赞赏。新年快乐!
答案1
这就是所谓的通配符子域名(在 DNS 中),然后使用 URL 重写来处理。
通配符子域名如下所示:
*.domain.tld. IN A 1.2.3.4
然后您可以将 apache 设置为接受对任何子域的请求:
<VirtualHost 111.22.33.55>
DocumentRoot /www/subdomain
ServerName www.domain.tld
ServerAlias *.domain.tld
</VirtualHost>
然后,您可以使用 mod_rewrite 将其中一个子域上的流量重定向到子文件夹或查询字符串。如下所示:
RewriteCond %{HTTP_HOST} ^(www.)?([a-z0-9-]+).domain.com [NC]
RewriteRule (.*) %2/$1 [L]
答案2
我不了解 tomcat,但在 IIS 中,如果网站设置为 IP 地址(即没有特定的主机头/子域),则所有子域都会指向同一个站点(不确定这里的确切术语)
如果是这种情况,您可以通过编程检测子域并做出相应的反应。
答案3
一个典型的方法是subdomain_fu,它是 Rails 的子域处理程序,在此截屏视频中进行了解释:http://media.railscasts.com/videos/123_subdomains.mov。
概念上:您可以使用子域名捕获所有服务器别名设置 apache,然后使用您的 webframework 执行子域名处理。