2016-03-24 47 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