似乎 Nginx 在与正则表达式一起使用时总是对 url 进行解编码。我有一个重写规则:
location /api/ {
rewrite /api/(.*)$ $1 break;
proxy_pass http://127.0.0.1:8000/$1;
}
Run Code Online (Sandbox Code Playgroud)
我想从 usl 中删除 api 但保留路径的其余部分。路径的一部分是电子邮件地址 someone@somewhere.com。我正在通过某人 %40somewhere.com 但 Nginx 正在用 @ 符号将它转回来。
小智 6
正确答案似乎是
location /api/ {
rewrite ^ $request_uri;
rewrite ^/api/(.*) $1 break;
return 400;
proxy_pass http://127.0.0.1:8000/$uri;
}
Run Code Online (Sandbox Code Playgroud)
请参阅Nginx pass_proxy 子目录,无需 url 解码以获取完整答案和原作者。
(我意识到这个问题比我引用的问题要早,但我在谷歌搜索中发现了这个问题,可能不是最后一个问题,所以......)
这就是 Nginx 处理 url 的方式。您可以通过更改 Web 应用程序将“%”字符转义为“%25”并传递 来绕过它someone%2540somewhere.com。
这将不会被转义为someone%40somewhere.com.
| 归档时间: |
|
| 查看次数: |
4029 次 |
| 最近记录: |