web-dev-qa-db-ja.com

私のURLがnginx.confでエンコードされているのはなぜですか?

基本的に、このnginx.confファイルがあり、index.htmlページフォームからいくつかのパラメーターを受け取ります。これらのパラメーターの1つは$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の問題を修正するにはどうすればよいですか?ありがとう

2
paulalexandru

基本的に、$ url構文にGETパラメータを使用しているため、HTTPのURLには文字列のエンコードが必須です。そのため、すべての特殊文字がフォームからURLにエスケープされます。

しかし、URLをデコードすることで nginx-lua-module 's ngx-escape-uri を使用してLUAスクリポットで作業を行うことができます。

newstr = ngx.unescape_uri($url)

(URLの取得方法によって異なります)

ソース: https://stackoverflow.com/questions/20282054/how-to-urldecode-a-request-uri-string-in-lua

2
moutonjr