外部链接URL编码导致Nginx服务器上的'%3F'和'%3D'

use*_*653 13 rewrite nginx external-links

我的服务器出了问题.我有四个入站链接到我的动态网页的不同网站,看起来像这样:

myurl.com/default/Site%3Fid%3D13
Run Code Online (Sandbox Code Playgroud)

他们应该是这样的:

myurl.com/default/Site?id=13
Run Code Online (Sandbox Code Playgroud)

我知道那些%3F?符号的转义序列,而且%3D是等号的转义序列.但是当我使用这些链接时,我确实收到错误400.我该怎么办?

这四个链接适用于不同的网站,我想随着时间的推移会有更多这样的链接.所以对所有人的一个解决方案将是完美的

cns*_*nst 8

大约一年前,在nginx-ru邮件列表上实际上提出了一个完全相同的问题:

http://mailman.nginx.org/pipermail/nginx-ru/2013-February/050200.html

最有帮助的回应,由Nginx,Inc,员工/开发人员,ВалентинБартенев:

http://mailman.nginx.org/pipermail/nginx-ru/2013-February/050209.html

Еслизапросприходитвтакомвиде,тоэтоуженепараметры,аимязапрошенногофайла.Другоедело,чтоlocationищетсяпоужераскодированномуадресу,очемвдокументациинаписано.

翻译:

如果请求以这种形式出现,那么这些不再是args,而是请求文件的名称.另一件事是,如文档所述,位置匹配是针对规范化的URI执行的.

他建议的解决方案,从SO的问题转换为示例,将是:

location /default/Site? {
    rewrite \?(.*)$ /default/Site?$1? last;
}

location = /default/Site {
    [...]
}
Run Code Online (Sandbox Code Playgroud)