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

URL 重写 QUERY_STRING NGINX?

如何解决URL 重写 QUERY_STRING NGINX?

我想从最后一个地址带有 x-oss-process 参数的主机下载任何文件。 i.PHP?path=$1&x-oss-process=%1 参考$1是被引用文件的地址,%1是x-oss-process参数的值 喜欢下面的链接

https://dl.example.com/img/all/235868.jpg?x-oss-process=image/resize,q_60

将这个地址引用到下面的地址后

i.PHP?path=img/all/235868.jpg&x-oss-process=image/resize,q_60

现在我该如何编写 Nginx 代码来做到这一点?感谢您的帮助。

解决方法

如果查询参数名称不包含任何破折号字符,例如 which -a pre-commit 而不是 x_oss_process,解决方案会简单得多。在这种情况下,我们可以检查 x-oss-process 变量(请参阅 $arg_name 变量说明):

$arg_x_oss_process

第一个参数 if ($arg_x_oss_process) { rewrite ^ /i.php?path=$uri; } 是匹配任何字符串的正则表达式,$uri 是规范化的请求 URI(没有查询参数)。所有查询参数都将添加到重写的 URI(请参阅 rewrite 指令说明):

如果替换字符串包含新的请求参数,则先前的请求参数会附加在它们之后。如果这是不希望的,在替换字符串的末尾放置一个问号可以避免附加它们,例如:

^

但是,由于您的查询参数名称包含破折号,因此解决方案将更加复杂(有关其他详细信息,请参阅 this SO 问题)。我们需要使用 $args 指令从 map 变量中获取 rewrite ^/users/(.*)$ /show?user=$1? last; 查询参数值,该指令应该放置在 x-oss-process 块的外部

server

这个重写规则会重写

map $args $x_oss_process {
    ~(?:^|&)x-oss-process=([^&]*)    $1;
}

server {
    ...
    if ($x_oss_process) {
        rewrite ^ /i.php?path=$uri;
    }
    ...
}

请求

/img/all/235868.jpg?x-oss-process=image/resize,m_lfit,h_200,w_200/quality,q_60

这与您所要求的略有不同(注意 /i.php?path=/img/all/235868.jpg&x-oss-process=image/resize,q_60 URI 部分之前的斜线)。我宁愿更改 img/all/235868.jpg 脚本以正确处理此问题,但是如果您想用 nginx 本身去除此斜杠,则可以使用第二个 i.php 块:

map

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