2016-07-04 8 views
1

リクエストURLが 'http://mydomain/url=http://example.com'のnginx return 'http://example.com'にはconfブローが使用されますが、 'http:/xxx.com' 。nginxでURIパスから "http://"(二重スラッシュ)をリダイレクト

何が間違っている、誰かがいくつかの助けを与えることができます!ありがとう。

これはとにかく、おそらくより良いアプローチであるアレクセイ・テンの提案あなたはまた、次のように使用することができ、実際にセキュリティ上の問題を引き起こす可能性がある、http://nginx.org/r/merge_slashesを使用するために、(ほかに

location ~ url=(.*)$ { 
    return 301 $1; 
} 
+1

なぜ、人々はパラメータを渡すために独自の非標準的方法を発明しようとしていますか?シンプルな '?url = whatever'では何が間違っていますか? –

+1

Nginxは隣接するスラッシュを1つに圧縮します。なぜなら、それは誰もが99.99%の時間を望んでいるからです。 'merge_slashes off;'ディレクティブhttp://nginx.org/r/merge_slashesで無効にすることができますが、セキュリティ上の脆弱性が存在する可能性があります。 –

+0

私の答えはあなたの質問を解決しましたか?はいの場合は、[承諾]ボタンをクリックしてください(そうすることによってもいくつかの点が得られます)。 – cnst

答えて

0

私のnginxのconfにありますあなたがaleady URL構造に設定されている場合、それは)です:

location /url= { 
    if ($request_uri ~ ^/url=(.*)$) { 
     return 301 $1; 
    } 
    return 403; 
} 

別のオプションは、次のようになります。

location /url=http:/ { 
    rewrite ^/url=http:/(.*)$ http://$1; 
} 

ところで、私は正規表現をトップレベルの場所で使用することは避けています。なぜなら、一般的に上記の方法を使用するよりも効率が悪いからです。しかし、基本的に同じアプローチで同様に行うことができます。

ただし、ユーザーがユーザー指定の文字列に無条件にリダイレクトすると、サイトが特定の攻撃に対して脆弱になる可能性があることに注意してください。

関連する問題