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 提供商允许我这样做?
都是有能力的。它甚至不需要是特定于 DNS 的提供,大多数优秀的主机也会为您提供帮助。有两个阶段:
*.example.com*.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.
这将赶app1.example.com在HTTP_HOST-它会匹配RewriteCond。
通常,Apache 只会通过/bob检查RewriteRule. 为了使用子域,我们通过强制下一个规则匹配来利用链接
${HTTP_HOST}$1
| ^ /bob
^ app1.example.com
Run Code Online (Sandbox Code Playgroud)
最后RewriteRule,现在针对匹配app1.example.com/bob和不只是/bob。因此,它可以有一个“完整”的正则表达式来匹配这个子域和路径,并执行所需的重定向。
如果您不想要此功能,则可以简化规则。
这些替代方案是否可行?将它们全部重定向到具有重定向到正确子文件夹的静态 IP 的特殊 web 应用程序。我怎么知道它们来自哪个子域?
没有万无一失的方法来做到这一点。您可以尝试 HTTP Referer,但并非总是由所有浏览器发送,某些防火墙会删除标头等。
在需要时以编程方式创建每个规则。哪些 DNS 提供商具有 API 访问权限以添加规则?我认为 Amazon Route 53 可能是这里的答案。
这实际上会导致上述问题的解决方案更复杂,所以我不推荐它。这也会造成延迟:DNS 缓存需要更新,某些访问者在更新之前无法立即使用子域。至少根据我上面的建议,他们可以立即开始。