2016-10-31 106 views
0

我有一個nginx的情況,我需要一點幫助。nginx重定向/重寫問題的具體規則

故事:

  • 曾經有一個網站,讓我們稱之爲website.com,即曾在它創建的虛擬子域。像子域 .website.com每個URL是動態創建(有 .website.com,anothersubdomain .website.com,someothersubdomain .website.com等子域)
  • 每個創建子域有一個內部結構,像子域 .website.com/一些/內部/結構/子域 .website.com/一些-file.html現在
  • ,業主想要永久中號奧雅納所有的子域的主要網站裏面,像這樣website.com/sub- 子域 /或website.com/sub- 子域/一些/內部/結構或website.com/sub- 子域/一些-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; 
} 

的概率LEM是,如果我有一個像子域名的URL .website.com/一些/內部/結構/子域 .website.com/一些-file.html所有我上面的代碼片斷得到的是這個www.website.com/sub- 子域 /和我正在失去子域結構的其餘部分(「some/internal/structure/」或「some-file.html」) - 沒有當然是)

我應該如何修改上面的代碼片段,以便保留上面提到的丟失部分?

非常感謝您的幫助!

回答

0

好了,在此期間,我想出了這個解決方案:

我已經取消了上述代碼段中,取而代之的是這一個

if ($http_host ~ "([^.]+).website.com") { 
    set $bref_1 $1; 
} 

if ($bref_1 != "www") { 
    return 301 http://www.website.com/sub-$bref_1$request_uri; 
}