2013-08-03 13 views
78

私はURL構造を再編成しています。 特定のURLのリダイレクトルールを設定する必要があります。NGINXを使用しています。nginxで単一のURLをリダイレクトする方法は?

基本的にはこのような何か:

http://example.com/issue1 --> http://example.com/shop/issues/custom_issue_name1 
http://example.com/issue2 --> http://example.com/shop/issues/custom_issue_name2 
http://example.com/issue3 --> http://example.com/shop/issues/custom_issue_name3 

ありがとう!

+3

「isse」または「issue」ですか。回答は「問題」とみなされます... –

+0

それは問題です。タイポを修正しました – tokmak

答えて

84

サーバーディレクティブでこれを入れて:

location /issue { 
    rewrite ^/issue(.*) http://$server_name/shop/issues/custom_issue_name$1 permanent; 
} 

か、それを複製する:

location /issue1 { 
    rewrite ^/.* http://$server_name/shop/issues/custom_issue_name1 permanent; 
} 
location /issue2 { 
    rewrite ^.* http://$server_name/shop/issues/custom_issue_name2 permanent; 
} 
... 
113
location ~ /issue([0-9]+) { 
    return 301 http://example.com/shop/issues/custom_isse_name$1; 
} 
+0

@Cybolic私はちょうどバージョン「1.10.3」のドッカー画像でこれをテストしましたが、どうにかして設定ファイルを提供できますか? おそらく何か不足しています。 –

28

あなたは、いくつかのリダイレクト以上を複製する必要がある場合は、マップを使用して検討するかもしれません。

map $uri $redirect_uri { 
    ~^/issue1/?$ http://example.com/shop/issues/custom_isse_name1; 
    ~^/issue2/?$ http://example.com/shop/issues/custom_isse_name2; 
    ~^/issue3/?$ http://example.com/shop/issues/custom_isse_name3; 
    # ... or put these in an included file 
} 

location/{ 
    try_files $uri $uri/ @redirect-map; 
} 

location @redirect-map { 
    if ($redirect_uri) { # redirect if the variable is defined 
     return 301 $redirect_uri; 
    } 
} 
+4

これは私がここで探していたものです。これらをインクルードファイルに入れることは、ApacheのRewriteRulesでいっぱいの.htaccessファイルを置き換える優れた方法です。 –

+2

このマップアプローチを既存のロケーション/ proxy_passタイプの設定とどのように組み合わせますか? –

+0

'@ redirect-map'の場所では、' 'if($ redirect_uri =" "){return 404;}'とかproxy_passのようなものを試してみることができます。 '$ redirect_uri'を使ってリライトする必要があります。 –