将所有子域名重定向至子文件夹

将所有子域名重定向至子文件夹

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

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

所有子域名都仅有一级深度。

问题

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

答案1

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

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

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

然后,在您的终端,添加一个.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号线

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

3号线

通常情况下,Apache 只会通过/bob检查RewriteRule。要使用子域名,我们需要利用链式强制匹配下一条规则

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

4号线

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

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


这些替代方案可行吗?将它们全部重定向到具有静态 IP 的特殊 Web 应用程序,该 IP 会重定向到正确的子文件夹。我如何知道它们来自哪个子域?

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

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

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

相关内容