2016-06-12 13 views
2

私はnginxで簡単なカスタムリダイレクトを実装しようとしています。nginxでカスタムURLにリダイレクトするにはどうすればよいですか?

着信要求:

http://localhost:8182/testredirect/?asd=456&aaa=ddd&trueurl=http://example.com/sdd?djdj=55 

私はhttp://example.com/sdd?djdj=55にHTTP 302リダイレクトを受け取りたいです。私はtrueurl議論の後に何かに進む。

私はこれ試してみてください。

location /testredirect/ { 
    rewrite "\&trueurl=(.*)$" $1 redirect; 
} 

をしかし、これは動作するようには思えません。エラー404が返されます。 何か迷っていますか?

+0

代わりに、私は '& 'trueurl = http://(。*)$" http:// $ 1リダイレクト; 'nginx'は、' rewrite'の2番目の引数が 'http://'や 'https://'で始まると、動作が異なります。 – grochmal

答えて

1

感謝。最後に、私は次のようになりました。

location /testredirect/ { 
    if ($args ~* "\&trueurl=http(.*)$") { 
     return 302 http$1; 
    } 
} 
2

rewrite正規表現はURIのクエリ文字列部分では動作しないため、コードは決して一致しません。ただし、問題のパラメータはすでに$arg_trueurlとして取得されています。詳細は、this documentを参照してください。例えば

:クエリ文字列に関する役立つノートのリチャード・スミス@

location /testredirect/ { 
    return 302 $arg_trueurl; 
} 
+0

これは意味がありますが残念ながら 'trueurl'にはエスケープされていない引数もあります。私は '&trueurl ='の後に何かを抽出してそれにリダイレクトするために正規表現でクエリ文字列を解析する必要があります。 – baldr

関連する問題