nginxの書き換えは、URLの末尾にパラメータを追加します


13

次のパラメーターがURLの最後に追加されるように、リバースプロキシを構成する必要があります。 &locale=de-de

これはほとんど機能します:

rewrite ^(.*)$ $1&locale=de-de break;

ただし、問題は、「&locale = de-de」がまだ存在ない場合、および「?」がある場合にのみ追加する必要があることです。URLに...

これを行うための正しい正規表現の定式化に関するヘルプを得ることができますか?

別の質問:これを使用すると、URLの疑問符が表示されないのはなぜ
ですか:$ uri?$ args

または、$ uri $ is_args $ argsはエンコードされていないURLを変換し、疑問符は%3fとして表示されます。

アイデア?

編集:proxy_passと組み合わせて使用​​しているときにこの動作が存在するようです。簡単な書き直しで、非常にうまく機能します。

回答:


15
  1. ではrewrite、あなたURLの照合パス部分のみ。つまり、$1クエリ文字列は含まれません。
  2. デフォルトでは、Nginxは元のクエリ文字列を書き換え置換に追加します。

だから、書くのは安全なはずです

rewrite ^(.*)$ $1?locale=de-de break;

Nginxに元のクエリ文字列を追加させたくない場合?は、置換URLの最後に指定するだけです:

rewrite ^(.*)$ $1?locale=de-de? break;

ありがとうございました!私はそれを間違った方法でやろうとしたことを知りませんでした。
サシャ

A +これが最良の答えです
ありがとう


3

rewriteリクエストパラメータ、URIのパスのみの部分を変更しません。私の経験では、書き換えをいじることは奇妙なサイクルにつながり、新しいパラメーターが無限に追加されます。書き換えは、おそらくNginxでこれを行う方法ではありません。

代わりに、ディレクティブ$argsを使用して変数を変更する必要がありますset

set $args $args&locale=de-de;

私はそれに反対$args変異されるべきです。代わりに、@ AlexanderAzarovのソリューションを参照してください。
ありがとう
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.