NGINXは%2fをスラッシュでエスケープします。どうすればそれを止めることができますか?

記事のタイトルをURLにエンコードしたいところにスラッシュが含まれているとします。 URLに記事のタイトルをエンコードすると、

http://example.com/articles/foo%2fbar/view/

NGINXはこれを私のFastCGIアプリケーションに次のように渡します:

http://example.com/articles/foo/bar/view/

どちらがむしろアイデアを台無しにする。

私は、NGINXが/path/to/page.htmlというファイルを提供している場合は、次の2つのURLのどちらかでアクセスできることに気付きます。

http://example.com/path/to/page.html
http://example.com/path/to%2fpage.html

しかし、これは(例えば)Apacheの場合ではありません。

この動作を修正する方法はありますか?

私は幸運とドキュメントとGoogleを試してみました。

ありがとう。

更新

nginxの設定:

worker_processes  1;
pid ./nginx.pid;
events {
    worker_connections  1024;
}
http {
    server_tokens off;
    server {
        listen 80;
        server_name localhost;
        location /mysite/{
            fastcgi_pass   unix: ./mysite.fcgi.socket;

            fastcgi_param SERVER_NAME $server_name;
            fastcgi_param SERVER_PORT $server_port;
            fastcgi_param SERVER_PROTOCOL $server_protocol;
            fastcgi_param SCRIPT_NAME "/mysite/";
            fastcgi_param PATH_INFO $fastcgi_path_info;
            fastcgi_param REQUEST_METHOD $request_method;
            fastcgi_param QUERY_STRING $query_string;
            fastcgi_param CONTENT_TYPE $content_type;
            fastcgi_param CONTENT_LENGTH $content_length;
            fastcgi_pass_header Authorization;
            fastcgi_intercept_errors off;
        }
    }

}
16
あなたのnginx設定はどのように見えるのですか?
追加された 著者 Amber,
stackoverflow.com/a/37584637/873282 も参照してください。
追加された 著者 koppor,

2 答え

"%"を "%25"としてエスケープしてみてください

http://example.com/articles/foo%252fbar/view/
2
追加された
@GuiGSは(悪い)アイデアです。それを2回デコード...
追加された 著者 cvsguimaraes,
これはバグではなく、ハックですが、ある時点で他のコードでバグが発生することはほぼ保証されています。パブリックWebインターフェイスへのすべてのアクセスをカプセル化することはできません。しかし!それは明らかにあなたが得なかった明らかにティックに値するので最もよい解決である。 @DaedalusFallの恥
追加された 著者 mxcl,
これは悪い考えです。つまり、何かのバグを回避するために、コードにバグを導入してダブルエスケープするということです。それは間違った方向に行きます。
追加された 著者 Glenn Maynard,
まあ、これはかなり簡単な変更を実装することも、コアコードを変更しようとすることを設定することもできます。潮流がどのように流れているのかを見てみるか、潮を変えようとする。それはすべての選択肢です。
追加された 著者 Dayo,
あなたは "バグ"をエスケープする二重を呼び出すことができる方法を推測することはできません。とにかく、それは間違った方向、Nginx自身の作者がそのような状況で推薦する方向に行くように投票してこれをブランド化することは問題ありません...しかし、私はあなたがOPを推薦する代替ソリューションは見ません。この問題を抱えている誰かが、問題を「正しい方向」に動かしながら解決するために実装します。
追加された 著者 Dayo,
悪い考え(+1)ではないが、間違ったビットを修正しようとしているように感じる。 (私のエスケープ/エスケープを変更するのではなく、nginxの動作を変更する)
追加された 著者 DaedalusFall,
:-)私はむしろ単純な設定ファイルの変更であることを期待していました。その結果、私はPATH_INFOの$ URIを渡すことができますが、コードの最後を削除しなければならないことが分かりました。これは修正するのも間違っているようです。しかし、あなたが言うように、潮流...私はおそらく%252fのアイデアを実装する$ uriを見つけていませんでしたか?
追加された 著者 DaedalusFall,
'%252f'は私にとっては機能しません。 nginxは%2fと同様に%25をデコードしていないようです。だから私のアプリケーションは '%2f'という文字列を受け取ると '%252f'を受け取ってデコードしてしまいます。
追加された 著者 GuiGS,

URLクエリパラメータを使用すると、問題は発生しません。 あなたが行くことができるあなたのサーバーのルートを制御することができます:

http://example.com/articles/view/?path=foo%2fbar

nginxは%2fに触れません

0
追加された