NGINXのクエリパラメータのエンコードされたURLにリダイレクト

NGINXのクエリパラメータのエンコードされたURLにリダイレクト

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
  1. 行を追加

    load_module modules/ngx_http_js_module.so;
    

    デフォルト設定(nginx.conf)に変更してください。

  2. http.js次の内容でnginx設定ディレクトリにファイルを作成します。

    function decoded_target_url(r) {
        return decodeURIComponent(r.args.target_url);
    }
    
    export default {decoded_target_url};
    
  3. デフォルト設定を次に変更します。

    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
    }
    
  4. 実行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

関連文書:

関連情報