我想添加一个规则,以便所有的子域被redirect到一个子文件夹。 例如:
app1.example.com -> example.com/app1 app2.example.com -> example.com/app2 something.example.com -> example.com/something
所有的子域名只有一层。
问题
哪些DNS提供商允许我这样做?
所有有能力的人。 它甚至不需要是一个DNS特定的提供,大多数好的主机也会帮助你。 有两个阶段:
*.example.com
添加DNS条目 example.com
的VirtualHost
来响应*.example.com
。 然后,最后添加一个.htaccess
条目,该条目使用RewriteRule
来捕获每个子域,并使用HTTP_HOST
variables将其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
。
这将捕获HTTP_HOST
app1.example.com
– 它将匹配RewriteCond
。
通常情况下,Apache只会通过/bob
来检查RewriteRule
。 要使用子域,我们通过强制下一个规则来匹配Chaining
${HTTP_HOST}$1 | ^ /bob ^ app1.example.com
最后的RewriteRule
现在与app1.example.com/bob
相匹配, 而不仅仅是/bob
。 因此,它可以有一个“完整的”正则expression式来匹配这个子域和path,并执行所需的redirect。
如果您不想使用此function,则可以简化规则。
这些scheme是否可行? redirect到一个特定的Web应用程序与一个静态IPredirect到正确的子文件夹。 我怎么知道他们来自哪个子域?
没有确定的方法来做到这一点。 您可以尝试使用HTTP Referer,但并不总是由所有浏览器发送,某些防火墙删除标题等。
在需要时,以编程方式创build每条规则。 哪些DNS提供者具有API访问权限来添加规则? 我认为亚马逊路线53可能是这里的答案。
这实际上会导致上述更复杂的解决scheme,所以我不会推荐它。 这也会造成延迟:DNScaching需要更新,并且某些访问者不能立即使用子域名。 至less在我上面的build议下,他们能够立即开始。