5

似乎 Nginx 在与正则表达式一起使用时总是对 url 进行编码。我有一个重写规则:

location /api/ {
    rewrite /api/(.*)$ $1 break;
    proxy_pass http://127.0.0.1:8000/$1;
}

我想从 usl 中删除 api,但保留路径的其余部分。路径的一部分是电子邮件地址someone@somewhere.com。我正在传递某人%40somewhere.com,但 Nginx 用 @ 符号将其转回。

4

2 回答 2

3

正确答案似乎是

location /api/ {
        rewrite ^ $request_uri;
        rewrite ^/api/(.*) $1 break;
        return 400;
        proxy_pass http://127.0.0.1:8000/$uri;
    }

有关完整答案和原作者,请参阅没有 url 解码的 Nginx pass_proxy 子目录。

(我意识到这个问题比我引用的那个问题要老,但我在谷歌搜索中发现了这个问题,可能不是最后一个,所以......)

于 2019-02-13T17:46:23.037 回答
1

这就是 Nginx 处理 url 的方式。您可以通过更改您的 Web 应用程序以将“%”字符转义为“%25”并通过来绕过它someone%2540somewhere.com

这将被转义为someone%40somewhere.com.

于 2012-08-08T21:22:40.877 回答