webserver – 重写规则在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

在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.

相关文章

Nginx (engine x) 是一个高性能的HTTP和反向代理服务,也是一...
本地项目配置 1 复制 luffy/settings/dev.py为prop.py 修改l...
nginx不仅可以隐藏版本信息,还支持自定义web服务器信息 先看...
一 、此次漏洞分析 1 nginx HTTP/2漏洞 [nginx-announce] ng...
###进入nginx 目录cd /usr/local/nginx###递归显示 2 级目录...
在cmd命令窗口输入下面命令进行查看 tasklist /fi "ima...