2017-03-16 20 views
1

私はURLにいくつか古い引数のリストを持っています。特定の引数リストのためのNginxリダイレクト

arg1 
arg2 
arg3 
... 
argn 

リンクのクエリ部分にあるこれらの引数のいずれかを持つ要求のいずれかを特定のサイトにリダイレクトする必要があります。

/page.html?arg1=sxx&arg2=uuu -> http://xxx.x.xxx.x 
/page.php?arg3= -> http://xxx.x.xxx.x 
/dir/dir/page/?arg2=111&& argn=xyyyy -> http://xxx.x.xxx.x 
/page.html (is not redirected but matched to other existing rules in nginx) 

これをうまく表現する方法はありますか。何らかの理由で、locationには正規表現と一致する引数がありません。

答えて

1

引数の順序が確定的であると仮定すると、$ request_uri変数に対して複数の正規表現をテストできます。

mapディレクティブを使用して、複数のルールと宛先をリストすることができます。

例えば:

map $request_uri $redirect { 
    default       0; 
    ~^/page\.html\?arg1=sxx&arg2=uuu http://xxx.x.xxx.x; 
    ~^/page\.php\?arg3=    http://xxx.x.xxx.x; 
    ... 
} 

server { 
    ... 
    if ($redirect) { 
     return 301 $redirect; 
    } 

もちろん、ギャップ(.*)と単語の境界(\b)を挿入することで、上記の正規表現を向上させることになるでしょう。

mapディレクティブの場合はthis documentifの場合はthis noteを参照してください。

関連する問題