Nginx重定向/重写特定规则的问题



我有一个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;
}

最新更新