2017-03-04 9 views
0

リダイレクトのためにmapディレクティブを使用しています。 私はいくつかのワイルドカードを設定するためにきましたが、それは動作しません:Nginxのマップリダイレクトのワイルドカード

/notizie~* /news; 

私は「/ notizie/$文字列」のようなすべてのURLが「/ニュース」にリダイレクトされるべきであるとします。

どういうところが間違っていますか?

答えて

1

を好きなら:

そう
map $request_uri $redirect_uri { 
     ~^/notizie(?<suffix>.*)$ /news$suffix; 
     default $request_uri; 
    } 

map $uri $redirect_uri { 
     ~^/notizie(?<suffix>.*)$ /news$suffix; 
     default $uri; 
    } 
+0

これは動作します: 〜/ notizie /(〜*)/ news; "whatever/notizie/whatever"のようなURLに一致します。 "/ notizie /"で始まるURLに一致するようにしました。 接尾辞を複製する必要はありません。 to/news – sergiod

+1

'〜^/notizie'に' '文字列の開始 ''を意味する'^'があるので、'/notizie'で始まるuriにのみマッチします。接尾辞を気にしない場合は、単に '〜^/notizie/news;'のように削除してください。 – danielgpm

+0

これでOKです。どうもありがとう :) – sergiod

1

先ほど301 HTTPコードでリダイレクトが必要な場合は、正規表現とlocationを使用することができます。

location ~* ^/notizie(.*)$ { 
    return 301 $scheme://$host/news$1; 
} 

~* -

$1大文字と小文字を区別しない正規表現を特定する - に捕捉一致を意味最初の括弧

return - 要求処理の終了を停止すると、指定されたコードとURLが返されます。

$host - 事前に定義された変数であり、あなたはそれをハードコーディングする、クエリのparamsは、あなたのリダイレクトのために重要である場合は、

+0

私は他のきリダイレクトするので、別のファイルでマップを使用しています。マップでもこの構文を使用できますか? – sergiod

+0

私はマップでこれをテストしていませんが、正規表現はマップhttp://nginx.org/en/docs/http/ngx_http_map_module.htmlでサポートされています。なぜそうではありませんか? – abcdn