我有这个位置规则:
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
,所以这个模式匹配 url(
和)
。
此外,我用 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/
?
PS我的nginx版本是nginx/1.9.10