我有一个nginx的情况,我需要一点帮助。
的故事:
- 曾经有一个网站,我们叫它website.com,里面创建了虚拟子域名。像子域.website.com这样的每个URL都是动态创建的(有子域.website.com, 另一个子域.website.com, 另一个子域.website.com, 另一个子域.website.com等等)
- 每个创建的子域都有一个内部结构,如子域.website.com/some/internal/structure/或子域.website.com/some-file.html
- 现在,所有者想要永久移动主网站内的所有子域,如website.com/sub-子域/或website.com/sub-子域/some/internal/structure或website.com/sub-子域/some-file.html
我现在所拥有的是捕获子域名并将它们重定向到主站内的规则,如下所示:
if ($http_host !~ "^www.website.com"){
set $rule_0 1$rule_0;
}
if ($http_host ~ "([^.]+).website.com"){
set $rule_0 2$rule_0;
set $bref_1 $1;
}
if ($rule_0 = "21"){
rewrite ^/(.*) http://www.website.com/sub-$bref_1/ permanent;
}
问题是,如果我有一个URL,如子域.website.com/some/internal/structure/或子域.website.com/some-file.html我得到的所有与上述代码片段是这个www.website.com/sub-子域/我失去了子域结构的其余部分("some/internal/structure/"或"some-file.html"部分-没有引号,当然)
我应该如何修改上面的代码片段,以保留上面提到的丢失的部分?
提前感谢您的帮助!
好的,与此同时,我想出了这个解决方案:
我已经取消了上面的代码片段,并替换为下面的
if ($http_host ~ "([^.]+).website.com") {
set $bref_1 $1;
}
if ($bref_1 != "www") {
return 301 http://www.website.com/sub-$bref_1$request_uri;
}