考虑如下所示的 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; }
}
}
目的 :更准确地说,我的网址是这样的:
http://myDomain.tld/anAddress/myFile.pdf?md5=So1Me2Ha3Sh4&expires=123456789
我希望它是这样的:
http://myDomain.tld/anAddress/myFile.pdf/So1Me2Ha3Sh4/123456789
在阿帕奇, 我们可以用:
RewriteRule ^(.*)pdf/(.*)/(.*)$ $1?md5=$2&expires=$3
当我尝试将其转换为 NGINX 形式时,它变成了:
rewrite ^/(.*)pdf/(.*)/(.*)$ /$1?md5=$2&expires=$3 break;
但这没有用。
答案1
在我看来,您没有捕获文件名的最后三个字符(即pdf
),这意味着它们在重写的 URI 中丢失了。
您应该尝试移动)
,以便pdf
将 捕获为 的一部分$1
:
rewrite ^/(.*pdf)/(.*)/(.*)$ /$1?md5=$2&expires=$3 break;
编辑:为了响应您的评论,您可以添加一个与您希望拒绝的 URI 匹配的新位置块,例如:
location ~* \.pdf$ {
return 403;
}
上面的正则表达式位置块匹配以.pdf
(带或不带查询字符串)结尾的任何 URI。看这个文件了解详情。