domain-name-system – 将所有子域重定向到子文件夹

我想添加一条规则,以便将所有子域重定向到子文件夹.例如:

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

所有子域只有一个级别.

问题

>哪些DNS提供商允许我这样做?
>这些替代方案是否可行?

>将它们全部重定向到具有静态IP的特殊webapp,该IP重定向到正确的子文件夹.我如何知道他们来自哪个子域?
>在需要时以编程方式创建每个规则.哪些DNS提供商具有API访问权限以添加规则?我认为亚马逊Route 53可能就是这里的答案.

最佳答案

Which DNS providers allow me to do this?

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

>为* .example.com添加了DNS条目
>主机的Web服务器(例如Apache)设置为通过将其路由到example.com的VirtualHost来响应* .example.com.

然后,在最后,添加一个.htaccess条目,该条目使用RewriteRule来捕获每个子域,并使用HTTP_HOST变量将其重定向到文件夹.

未经测试,但是这样的事情:

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.要使用子域,我们通过强制下一个匹配规则来利用链接

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

第4行

最终的RewriteRule现在与app1.example.com/bob匹配,而不仅仅是/ bob.因此,它可以具有“完整”正则表达式以匹配此子域和路径,并执行所需的重定向.

如果您不想要此功能,则可以简化规则.

Are these alternatives feasible? Redirect them all to a special webapp
with a static IP that redirects to the proper subfolder. How can I
know from which subdomain they came from?

没有确定的方法可以做到这一点.你可以试试HTTP Referer,但它并不总是由所有浏览器发送,有些防火墙会删除标题等.

Programatically create each rule when I need it. Which DNS providers
have API access to add rules? I think Amazon Route 53 might be the
answer here.

这实际上会导致更复杂的解决方案,所以我不推荐它.它还会造成延迟:DNS缓存需要更新,某些访问者无法立即使用子域,直到他们这样做.至少根据我的建议,他们能够立即开始.

转载注明原文:domain-name-system – 将所有子域重定向到子文件夹 - 代码日志