1

我有这个位置规则:

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

4

1 回答 1

1

对不起这个问题。Nginx 完美运行。问题不在于 nginx,而在于我们的 devops(几乎没有 dev 和非常糟糕的 ops)。下面我添加我们系统的方案。简而言之,该系统由以下部分组成:nginx 平衡器,apache 遗留系统,用于基于 soa 的新系统的 nginx,用于服务的 nginxes。

我咨询了 devops,他们告诉我在我们的一个 git repos 中更改某些 nginx 配置。我已经改变了它,牢记平衡器配置,但我们的开发人员忘记了 nginx 平衡器,因为它不受版本控制。所以我已经为新的 SOA 系统更改了 nginx 配置,但是这个重定向应该在平衡器阶段将我们的用户从旧系统发送到新系统。

我对我们的 devops 感到非常沮丧,所以 Nginx 可以工作,但他们没有:)

在此处输入图像描述

于 2016-03-26T07:47:16.137 回答