nginx重写以替换单个字符

nginx重写以替换单个字符,nginx,url-rewriting,wget,Nginx,Url Rewriting,Wget,我有一个工具,可以下载一堆tarball和补丁,我正在将它们镜像到本地NGINX服务器,以加快下载过程,并让我们更严格地控制正在使用的内容。为了使工具能够正常工作,本地文件名必须与远程文件名匹配(路径无关紧要),但是由于工具认为文件名是什么,我遇到了一个障碍? 例如,下载此远程修补程序: 文件名,就工具而言,是 OpenSSL -1.0.2D并行构建.Posid ID=C8ABCBE8DE5D6BDCD68 C162F98C011FF6E2D9D < /代码>中有一个好的小< > > />代码

我有一个工具,可以下载一堆tarball和补丁,我正在将它们镜像到本地NGINX服务器,以加快下载过程,并让我们更严格地控制正在使用的内容。为了使工具能够正常工作,本地文件名必须与远程文件名匹配(路径无关紧要),但是由于工具认为文件名是什么,我遇到了一个障碍

例如,下载此远程修补程序:

文件名,就工具而言,是<代码> OpenSSL -1.0.2D并行构建.Posid ID=C8ABCBE8DE5D6BDCD68 C162F98C011FF6E2D9D < /代码>中有一个好的小< > > />代码,中间和本地镜像必须是:

该工具使用wget下载文件,但不会将“?”替换为“%3f”,因此NGINX服务器返回404。如果手动将“?”替换为“%3f”,则wget工作正常

如果NGINX服务器从不将
视为查询字符串,我会很好,但如果不可能,我需要一种重写uri的方法,以便文件能够正确下载。我以为会是这样的:

rewrite ^(.*)\?(.*)$ $1%3f$2 permanent;
但这并不能解决我的问题。镜像文件夹在
/etc/nginx/apps/mirror.conf
中定义为别名,如有必要,如下所示:

location /mirror {
    autoindex on;
    alias /var/lib/dl-cache;
}

可能需要一些帮助来缩小差距。

指令
位置
重写
使用一个标准化的URI,该URI已经将
和查询字符串分隔开

变量
$request_uri
包含未修改的uri,可以使用
if…return
语句进行查询:

if ($request_uri ~ ^(/.*)[?](.*)$) { 
    return 301 $1%3f$2;
}

您可能希望将其放置在
位置
块中以限制范围。如果

设法错过了使用规范化URI的重写,请参阅关于
的使用,谢谢。