0

私は今日、nginx の書き換えに頭を悩ませようとしてきました。ここでいくつかの質問/回答を読み、出会ったいくつかのガイドを徹底的に読みました。

ほとんどのことは非常に自然に思い浮かびますが、おそらく正規表現の形式に慣れていないため、それを理解していません。

nginx ヘッダーを上書きし、ブラウザーに新しいページを開くのではなく、「名前を付けて保存」ダイアログを使用してダウンロードを実行させる download.php スクリプトがあります。

それは完全に機能しますが、スクリプト自体の URL をユーザーから隠したいと思います。

具体的には、この URL を変更したいと思います。

http://www.example.com/scripts/download.php?id=http://www.example.com/images/0/1/fullsize/96698298450ca01a60875e_34.jpg

そのため、ユーザーには単純にidGET パラメータとして表示されます。

http://www.example.com/images/0/1/fullsize/96698298450ca01a60875e_34.jpg

しかし、私の人生では、それを機能させることはできないようです。

うまくいけば、誰かが救助に来ることができます。前もって感謝します。

編集:

私の質問をさらに明確にするために...理想的な解決策は、私のwebappに次のようなリンクを設定できるようにすることです。

 http://www.example.com/images/0/1/fullsize/96698298450ca01a60875e_34.jpg?dl=1

dl=1 があり、かつ /images/ ディレクトリにあることを nginx に認識させ、ダウンロード スクリプトを使用するように書き換えます。

  http://www.example.com/scripts/download.php?id=http://www.example.com/images/0/1/fullsize/96698298450ca01a60875e_34.jpg

このように、画像が表示されているだけの場合、スクリプトを通過し、dl=1 パラメータが配置されている場合にのみ、画像が書き換えられ、スクリプトを介してルーティングされます。

4

1 に答える 1

1

私があなたの質問を正しく理解していればhttp://www.example.com/images/0/1/fullsize/96698298450ca01a60875e_34.jpg&dl=1、Web アプリのようにリンクを配置したいのですが、ユーザーがリンクをクリックすると、download.php スクリプトにリダイレクトされますか?

以下の rewrite ディレクティブは、同じホストにリダイレクトしていると仮定して、それを達成する必要があります。これは、クエリ パラメータで始まるすべてのURL パスに適用されます。これにより、302 (一時) リダイレクトが行われます。永続的な (301) リダイレクトが必要な場合は、 に置き換えます。/images/ dl=1redirectpermanent

location /images/ {
    if ($args ~ "dl=1") {
        rewrite ^/images/(.*)$ /scripts/donwloads.php?id=$scheme://$host/images/$1 redirect;
    }
}

他の方法で行こうとしている場合 (download.php スクリプトへのリンクがありますが、ユーザーを実際のリソース URL にリダイレクトします - 理由がわからず、おそらくそのようなブラインド リダイレクトを行うのは悪い考えです)、これでそれを行うことができますディレクティブ (idクエリ文字列パラメーターが存在することを確認する価値があります)

location /scripts/download.php {
    rewrite ^(.*)$ $arg_id? permanent;
}

これらのソリューションのいずれかがあなたの望む方向に向いているかどうかお知らせください。ニーズに合わせて調整できます。

于 2012-12-18T13:58:04.810 に答える