2012-10-30 25 views
2

當有問題的URL使用圓括號時,我很難獲得基本的301重定向在nginx中工作。Nginx 301在URL中使用圓括號重定向

通常情況下,我會簡單地使用這種類型的基本位置的規則(不帶括號):

來源網址:DOMAIN1

location /abc/def { 
rewrite /abc/def http://new.domain.com/abc/def/ permanent; 
} 

如上面提到其中的URL有圓括弧有情況。 COM/ABC/DEF(GHI) 目標URL:domain2.com/abc/defghi

location /abc/def(ghi) { 
rewrite /abc/def(ghi) http://new.domain2.com/abc/defghi permanent; 
} 

不幸的是,它不是如第一實施例一樣簡單。我已經多次修改規則以包含轉義,urlencoded用於打開和關閉圓括號,正則表達式允許在括號中捕獲單個字符,並且似乎沒有任何工作。

通過轉義:

location /abc/def\(ghi\) 

我怎樣才能得到301重定向在nginx的工作時,URL有括號?

回答

0
location /abc/def(ghi) { 
    return 301 http://new.domain2.com/abc/defghi; 
} 
+0

感謝驚人的快速響應和解決一百萬! – user1786331

0

雖然在這個特定的情況下VBart的答案的作品,它不是一個普遍的修復。

的基本問題是()在正則表達式的特殊字符, 對於一般的解決方法是逃避那些特殊字符 的問題在於,假如你包圍在正則表達式與\逃逸只能"

像這樣:

location /abc/def(ghi) { 
    rewrite "/abc/def\(ghi\)" http://new.domain2.com/abc/defghi permanent; 
} 
+0

_只有在將正則表達式包含在'''_中時纔有效_不,你在這裏是錯誤的,只有當正則表達式包含'''''''章程時才應該用引號引起來。參見文檔:http://nginx.org/r/rewrite – VBart

+1

問題在於作者在'('和')'之前在'location'前面放了'''(不是正則表達式)'http://nginx.org/r/location – VBart