考虑一个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
在Apache中,我们可以使用:
RewriteRule ^(.*)pdf/(.*)/(.*)$$1?md5=$2&expires=$3
当我尝试将其转换为NGINX形式时,它变为:
rewrite ^/(.*)pdf/(.*)/(.*)$/$1?md5=$2&expires=$3 break;
但它没有用.
解决方法:
在我看来,你没有捕获文件名的最后三个字符(即pdf),这意味着它们在重写的URI中缺失.
您应该尝试移动),以便将pdf作为$1的一部分捕获:
rewrite ^/(.*pdf)/(.*)/(.*)$/$1?md5=$2&expires=$3 break;
编辑:为了回应您的评论,您可以添加一个与您要拒绝的URI匹配的新位置块,例如:
location ~* \.pdf${
return 403;
}
上述正则表达式位置块匹配以.pdf结尾的任何URI(带或不带查询字符串).有关详情,请参见this document.