1

私はこの場所のルールを持っています:

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

次のような URL に最適です。

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

しかし今、私は自分の場所を変更して、その中の括弧でURLを一致させる必要があります. 私はこのバージョンを使用します:

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/');

そして を返すので、このパターンは url とおよび に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 はそうは考えていません。

この URL に一致するように nginx ロケーション ルールを変更するにはどうすればよい/banks/Respublika_Saha_(Yakutiya)/Neryungri/responses/ですか?

PS nginxの私のバージョンはnginx/1.9.10

4

1 に答える 1

1

この質問で申し訳ありません。Nginxは完璧に動作します。そして、問題は nginx ではなく、devops にありました (ほとんど開発者がなく、非常に悪い ops)。以下に、システムのスキームを追加します。簡単に言えば、システムは次の部分で構成されています: nginx バランサー、Apache レガシー システム、新しい soa ベース システム用の nginx、サービス用の nginxes。

DevOps に相談したところ、git リポジトリの 1 つで特定の nginx 構成を変更するように言われました。バランサーの設定を念頭に置いて変更しましたが、バージョン管理下にないため、開発者はnginxバランサーを忘れていました。そのため、新しい SOA システムの nginx 構成を変更しましたが、このリダイレクトにより、ユーザーはバランサー ステージで古いシステムから新しいシステムに送信されるはずです。

私は私たちのdevopsに非常に腹を立てていたので、Nginxは動作しますが、動作しません:)

ここに画像の説明を入力

于 2016-03-26T07:47:16.137 に答える