我这个位置的规则括号:变量捕获与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
但它的工作原理:[https://regex101.com/r/vI6jZ4/1]( https://regex101.com/r/vI6jZ4/1) –
是的,这个模式对于php'preg_match'或python're.search'可以正常工作,但是不适用于nginx位置规则 –
适用于'nginx' 1.8。 0 –