次の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と一致します。バラよりこのファイルもっと学ぶ。