微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐