NGINXで動作しないルールの書き換え

NGINXで動作しないルールの書き換え

次のURLを考えてみましょう。

http://myDomain.tld/anAddress/myFile.pdf?X=zzz&Y=kkk

どうやって入手できますか?

http://myDomain.tld/anAddress/myFile.pdf/zzz/kkk

?X私はとを削除したいと思います&Y。誰かが私がどのルールを使うべきかを教えてくれたら嬉しいです。

私のサーバーブロック:

server {
    listen 80;
    server_name _;

    location  / {
        root /my/root/path;

        rewrite ^/(.*)pdf/(.*)/(.*)$ /$1?md5=$2&expires=$3 break;

        secure_link $arg_md5,$arg_expires;
        autoindex on;

        secure_link_md5 "$secure_link_expires$uri aWord";

        if ($secure_link = "") { return 403; }
        if ($secure_link = "0") { return 410; }
    }
}

目的:より正確に言えば、私のURLは次のようになります。

http://myDomain.tld/anAddress/myFile.pdf?md5=So1Me2Ha3Sh4&expires=123456789

私はこれが次のようになりたい:

http://myDomain.tld/anAddress/myFile.pdf/So1Me2Ha3Sh4/123456789

存在するApache、以下を使用できます。

RewriteRule ^(.*)pdf/(.*)/(.*)$ $1?md5=$2&expires=$3

NGINX形式に変換しようとすると、次のようになります。

rewrite ^/(.*)pdf/(.*)/(.*)$ /$1?md5=$2&expires=$3 break;

しかし、それはうまくいきませんでした。

答え1

ファイル名の最後の3文字(たとえば)をキャプチャしないようです。pdfこれは、書き換えられたURIでその文字が失われたことを意味します。

キャプチャが次の一部になる)ように移動する必要があります。pdf$1

rewrite ^/(.*pdf)/(.*)/(.*)$ /$1?md5=$2&expires=$3 break;

編集:あなたのコメントに応じて拒否したいURIと一致する新しい場所ブロックを追加できます。たとえば、次のようになります。

location ~* \.pdf$ {
    return 403;
}

上記の正規表現位置ブロックは、.pdf(クエリ文字列の有無にかかわらず)で終わるすべてのURIと一致します。バラよりこのファイルもっと学ぶ。

関連情報