私は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 はlocation
URI パス部分とのみ一致します。バラよりこの問題はサーバーの障害が原因で発生します。:
質問:nginxロケーションブロックはURLクエリ文字列と一致できますか?
短い答え:いいえ。
ドキュメント参照:https://nginx.org/en/docs/http/request_processing.html
そのセクションを追加した後、リクエストで実際に何をしたいのかわからない場合は、?lang=fa
有効な例を提示することは困難です。