重写规则在 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; }
    }
}

目的 :更准确地说,我的网址是这样的:

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。看这个文件了解详情。

相关内容