NginxのリダイレクトURLの値がencodeURIComponent
。
location /redirect/ {
return 307 $arg_target_url;
}
ブラウザでURLを入力した場合:
mylocalserver.com/redirect/?target_url=example.com%3Fx%3Dy%26z%3Dk
次にリダイレクトされます。
mylocalserver.com/redirect/example.com%3Fx%3Dy%26z%3Dk
URLにリダイレクトする必要があると予想されますexample.com?x=y&z=k
。
ただし、$arg_target_url
通常の値を含めると機能します。
答え1
nginx および njs スクリプト言語をインストールするには、インストール手順をお読みください。nginx:Linuxパッケージ。まず、構成をバックアップします。
Debian の nginx.org 安定したリポジトリを例にとると、インストールのnginx
最小ステップとソフトウェアパッケージは次のようになります。nginx-module-njs
echo "deb http://nginx.org/packages/debian $(lsb_release -cs) nginx" |
sudo tee /etc/apt/sources.list.d/nginx.list
curl -fsSL https://nginx.org/keys/nginx_signing.key | sudo apt-key add -
sudo apt update
sudo apt install nginx nginx-module-njs
行を追加
load_module modules/ngx_http_js_module.so;
デフォルト設定(
nginx.conf
)に変更してください。http.js
次の内容でnginx設定ディレクトリにファイルを作成します。function decoded_target_url(r) { return decodeURIComponent(r.args.target_url); } export default {decoded_target_url};
デフォルト設定を次に変更します。
js_import http.js; js_set $decoded_target_url http.decoded_target_url; server { # ... more stuff default_type text/html; location /redirect/ { return 307 $decoded_target_url; } # ... more stuff }
実行
nginx -t
して構成を確認し、サーバーを再起動します。
次のクエリパラメータにプロトコル(http://
または)を追加する必要があります。https://
mylocalserver.com/redirect/?target_url=http%3A%2F%2Fexample.com%2F%3Fx%3Dy%26z%3Dk
または変更
return 307 $decoded_target_url
ハードコーディングする
return 307 http://$decoded_target_url
または
return 307 https://$decoded_target_url
関連文書: