SSLへのリダイレクトは機能しますが、変数のインポートは機能しません。

SSLへのリダイレクトは機能しますが、変数のインポートは機能しません。

私はnginxを持っていて、サーバー部分とポート80から次のようにホストをポート443にリダイレクトします。

server {
   location / {
       return 307 https://$host$request_uri/?lang=fa
   }
}

動作し、SSLにリダイレクトされますが、SSLブロックに場所を置くと、再帰的に次の結果が表示されます。

https://mydomain//?lang=fa/?lang=fa/?lang=fa/?lang=fa/?lang=fa/?lang=fa/?lang=fa/?lang=fa/?lang=fa/?lang=fa/?lang=fa/?lang=fa/?lang=fa/?lang=fa/?lang=fa/?lang=fa/?lang=fa/?lang=fa/?lang=fa/?lang=fa

設定する必要がありますが、https方法https://mydomain/?lang=faがわかりません。

答え1

変数が正常に動作しているようです。問題は、デフォルトではURLクエリ文字列部分のみを追加するため、URIパス部分は同じままです。location /リダイレクト後も一致し(連続スラッシュとマージされ)、無限の再帰が得られます。

これは、URL仕様にクエリ文字列パラメータの順序、つまり要求https://mydomain/?lang=fa&foo=barが重要ではないと指定されているためですhttps://mydomain/?foo=bar&lang=fa

nginx はlocationURI パス部分とのみ一致します。バラよりこの問題はサーバーの障害が原因で発生します。:

質問:nginxロケーションブロックはURLクエリ文字列と一致できますか?

短い答え:いいえ。

ドキュメント参照:https://nginx.org/en/docs/http/request_processing.html

そのセクションを追加した後、リクエストで実際に何をしたいのかわからない場合は、?lang=fa有効な例を提示することは困難です。

関連情報