基本上,我有这个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