为什么我的 url 在 nginx.conf 中被编码了?

为什么我的 url 在 nginx.conf 中被编码了?

基本上,我有这个nginx.conf文件,用于接收来自index.html页面表单的一些参数。其中一个参数被调用$url,我使用它来执行以下操作:

proxy_pass $url;

问题是操作失败了,因为$url似乎被编码了,在我的 error.log 文件中我看到如下内容:

[error] 18849#18849: *195088 invalid URL prefix in "http%3A%2F%2Fexample.com"

但是,如果我对操作进行硬编码,如下所示:

proxy_pass http://example.com;

或者像这样:

set $url_backup http://example.com
proxy_pass $url_backup;

它可以正常工作。

我该如何修复 URL 问题?谢谢

答案1

基本上,由于您在 $url 语法中使用了 GET 参数,因此 HTTP 的 URL 必须对字符串进行编码。这就是为什么表单中的每个特殊字符都会被转义到 URL 中。

但是你可以用 LUA 脚本来完成你的工作nginx-lua 模块ngx-转义-uri通过解码你的 URL:

newstr = ngx.unescape_uri($url)

(取决于你如何获取 URL)

资料来源:https://stackoverflow.com/questions/20282054/how-to-urldecode-a-request-uri-string-in-lua

相关内容