2016-03-24 44 views
0

我這個位置的規則括號:變量捕獲與Nginx的位置相匹配,

location ~ ^/banks/(?P<region>[\w/~\-]+?)/responses/?$ { 
    rewrite^$scheme://${host}/services/responses/list/city/${region}/? permanent; 
} 

和它的作品完美的網址,如:

http://example.com/banks/Arhangel~skaya_oblast~/Mirnyiy/responses/ 

但現在我需要修改我的位置相匹配的網址裏面有括號。我使用這個版本:

location ~ ^/banks/(?P<region>[\w/~\-()]+?)/responses/?$ { 
    rewrite^$scheme://${host}/services/responses/list/city/${region}/? permanent; 
} 

但是沒有重寫發生的url /banks/Respublika_Saha_(Yakutiya)/Neryungri/responses/

我檢查這個模式用PHP preg_match功能:

preg_match('|^/banks/(?P<region>[\w/~\-()]+?)/responses/?$|', 
    '/banks/Respublika_Saha_(Yakutiya)/Neryungri/responses/'); 

並返回1,所以這個模式匹配的網址與()

而且我檢查這個字符串使用Python re.search:

import re 
matches = re.search('|^/banks/(?P<region>[\w/~\-()]+?)/responses/?$|','/banks/Respublika_Saha_(Yakutiya)/Neryungri/responses/') 
print matches.start() 

並返回0,所以這種模式從一開始這個字符串相匹配。

但是nginx不這麼認爲。

我該如何修改nginx的位置規則來匹配這個url /banks/Respublika_Saha_(Yakutiya)/Neryungri/responses/

P.S.我的nginx版本是nginx/1.9.10

+0

但它的工作原理:[https://regex101.com/r/vI6jZ4/1]( https://regex101.com/r/vI6jZ4/1) –

+0

是的,這個模式對於php'preg_match'或python're.search'可以正常工作,但是不適用於nginx位置規則 –

+0

適用於'nginx' 1.8。 0 –

回答

0

對不起這個問題。 Nginx完美運行。問題不在於nginx,而在於我們的devops(幾乎沒有開發者和非常糟糕的操作)。我在下面添加我們系統的方案。簡而言之,系統由以下部分組成:nginx平衡器,apache遺留系統,用於基於新soa的系統的nginx,用於服務的nginxes。

我諮詢了devops,他們告訴我在我們的git倉庫中改變某個nginx配置。我已經改變了它記住平衡器配置,但我們的devops忘了nginx平衡器,因爲它不受版本控制。所以我已經改變了新的SOA系統的nginx配置,但是這個重定向應該在平衡器階段將我們的用戶從舊系統發送到新系統。

我是通過我們的DEVOPS很苦惱,所以Nginx的工作,但他們不:)

enter image description here