将所有子域redirect到子文件夹

我想添加一个规则,以便所有的子域被redirect到一个子文件夹。 例如:

app1.example.com -> example.com/app1 app2.example.com -> example.com/app2 something.example.com -> example.com/something 

所有的子域名只有一层。

问题

  • 哪些DNS提供商允许我这样做?
  • 这些scheme是否可行?
    • redirect到一个特定的Web应用程序与一个静态IPredirect到正确的子文件夹。 我怎么知道他们来自哪个子域?
    • 在需要时,以编程方式创build每条规则。 哪些DNS提供者具有API访问权限来添加规则? 我认为亚马逊路线53可能是这里的答案。

哪些DNS提供商允许我这样做?

所有有能力的人。 它甚至不需要是一个DNS特定的提供,大多数好的主机也会帮助你。 有两个阶段:

  1. *.example.com添加DNS条目
  2. 主机的Web服务器(如Apache)设置为通过路由到example.comVirtualHost来响应*.example.com

然后,最后添加一个.htaccess条目,该条目使用RewriteRule来捕获每个子域,并使用HTTP_HOSTvariables将其redirect到一个文件夹。

未经testing,但是这样的事情:

 RewriteEngine on RewriteCond %{HTTP_HOST} ^[^.]+\.example\.com$ RewriteRule ^(.+) %{HTTP_HOST}$1 [C] RewriteRule ^([^.]+)\.example\.com(.*) http://example.com/$1/$2 

假设用户请求app1.example.com/bob

2号线

这将捕获HTTP_HOST app1.example.com – 它将匹配RewriteCond

3号线

通常情况下,Apache只会通过/bob来检查RewriteRule 。 要使用子域,我们通过强制下一个规则来匹配Chaining

 ${HTTP_HOST}$1 | ^ /bob ^ app1.example.com 

4号线

最后的RewriteRule现在与app1.example.com/bob相匹配, 不仅仅是/bob 。 因此,它可以有一个“完整的”正则expression式来匹配这个子域和path,并执行所需的redirect。

如果您不想使用此function,则可以简化规则。


这些scheme是否可行? redirect到一个特定的Web应用程序与一个静态IPredirect到正确的子文件夹。 我怎么知道他们来自哪个子域?

没有确定的方法来做到这一点。 您可以尝试使用HTTP Referer,但并不总是由所有浏览器发送,某些防火墙删除标题等。

在需要时,以编程方式创build每条规则。 哪些DNS提供者具有API访问权限来添加规则? 我认为亚马逊路线53可能是这里的答案。

这实际上会导致上述更复杂的解决scheme,所以我不会推荐它。 这也会造成延迟:DNScaching需要更新,并且某些访问者不能立即使用子域名。 至less在我上面的build议下,他们能够立即开始。