将所有子域重定向到子文件夹

alf*_*alf 6 domain-name-system godaddy subdomain amazon-route53

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

app1.example.com -> example.com/app1
app2.example.com -> example.com/app2
something.example.com -> example.com/something
Run Code Online (Sandbox Code Playgroud)

所有子域都只有一层深。

问题

  • 哪些 DNS 提供商允许我这样做?
  • 这些替代方案是否可行?
    • 将它们全部重定向到具有重定向到正确子文件夹的静态 IP 的特殊 web 应用程序。我怎么知道它们来自哪个子域?
    • 在需要时以编程方式创建每个规则。哪些 DNS 提供商具有 API 访问权限以添加规则?我认为 Amazon Route 53 可能是这里的答案。

Jay*_*Jay 8

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

都是有能力的。它甚至不需要是特定于 DNS 的提供,大多数优秀的主机也会为您提供帮助。有两个阶段:

  1. 添加了一个 DNS 条目,用于 *.example.com
  2. 主机的 Web 服务器(例如 Apache)设置为*.example.com通过将其路由到example.com's来响应VirtualHost

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

未经测试,但类似这样:

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

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

2号线

这将赶app1.example.comHTTP_HOST-它会匹配RewriteCond

3号线

通常,Apache 只会通过/bob检查RewriteRule. 为了使用子域,我们通过强制下一个规则匹配来利用链接

${HTTP_HOST}$1
|           ^ /bob
^ app1.example.com
Run Code Online (Sandbox Code Playgroud)

4号线

最后RewriteRule,现在针对匹配app1.example.com/bob只是/bob。因此,它可以有一个“完整”的正则表达式来匹配这个子域和路径,并执行所需的重定向。

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


这些替代方案是否可行?将它们全部重定向到具有重定向到正确子文件夹的静态 IP 的特殊 web 应用程序。我怎么知道它们来自哪个子域?

没有万无一失的方法来做到这一点。您可以尝试 HTTP Referer,但并非总是由所有浏览器发送,某些防火墙会删除标头等。

在需要时以编程方式创建每个规则。哪些 DNS 提供商具有 API 访问权限以添加规则?我认为 Amazon Route 53 可能是这里的答案。

这实际上会导致上述问题的解决方案更复杂,所以我不推荐它。这也会造成延迟:DNS 缓存需要更新,某些访问者在更新之前无法立即使用子域。至少根据我上面的建议,他们可以立即开始。