NGINX将%2f转换为正斜杠.我怎么能阻止它?

Dae*_*all 17 url escaping nginx

假设我想在URL中编码文章标题并包含斜杠.如果我对文章标题进行URL编码,我得到:

http://example.com/articles/foo%2fbar/view/
Run Code Online (Sandbox Code Playgroud)

NGINX将此传递给我的FastCGI应用程序,如下所示:

http://example.com/articles/foo/bar/view/
Run Code Online (Sandbox Code Playgroud)

这相当破坏了这个想法.

我注意到如果NGINX正在提供文件,比如/path/to/page.html,那么可以通过以下两个URL之一访问它:

http://example.com/path/to/page.html
http://example.com/path/to%2fpage.html
Run Code Online (Sandbox Code Playgroud)

但是(例如)Apache不是这种情况.

有没有办法解决这个问题?

我试过文档和谷歌没有运气.

谢谢.

UPDATE

nginx配置:

worker_processes  1;
pid ./nginx.pid;
events {
    worker_connections  1024;
}
http {
    server_tokens off;
    server {
        listen 80;
        server_name localhost;
        location /mysite/{
            fastcgi_pass   unix: ./mysite.fcgi.socket;

            fastcgi_param SERVER_NAME $server_name;
            fastcgi_param SERVER_PORT $server_port;
            fastcgi_param SERVER_PROTOCOL $server_protocol;
            fastcgi_param SCRIPT_NAME "/mysite/";
            fastcgi_param PATH_INFO $fastcgi_path_info;
            fastcgi_param REQUEST_METHOD $request_method;
            fastcgi_param QUERY_STRING $query_string;
            fastcgi_param CONTENT_TYPE $content_type;
            fastcgi_param CONTENT_LENGTH $content_length;
            fastcgi_pass_header Authorization;
            fastcgi_intercept_errors off;
        }
    }

}
Run Code Online (Sandbox Code Playgroud)

Day*_*ayo 2

尝试将“%”转义为“%25”

http://example.com/articles/foo%252fbar/view/
Run Code Online (Sandbox Code Playgroud)

  • 这是一个坏主意:这意味着您在代码中引入了一个错误(双重转义),以便解决其他内容中的错误。这正朝着错误的方向发展。 (16认同)
  • 不错的主意(+1),尽管感觉像是试图修复错误的部分。(改变我的转义/取消转义而不是改变 nginx 的行为) (2认同)
  • 好吧,您可以实现这个相当简单的更改,也可以尝试更改核心代码。观察潮汐如何流动并与之合作或尝试改变潮汐。这一切都与选择有关。 (2认同)
  • RFC 3986 说:“[实现不得多次对同一字符串进行百分比编码或解码](https://tools.ietf.org/html/rfc3986#section-2.4)” (2认同)