如何解决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 举报,一经查实,本站将立刻删除。