nginxで単一のURLをリダイレクトする方法は?


111

私はurl構造を再編成している最中です。特定のURLのリダイレクトルールを設定する必要があります-NGINXを使用しています。

基本的にこのようなもの:

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」ですか?回答は「問題」を前提としています...
マシューウィルコクソン2014年

問題です。タイプミスを修正しました
tokmak 2015年

回答:


122

これをサーバーディレクティブに追加します。

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;
}
 ...

139
location ~ /issue([0-9]+) {
    return 301 http://example.com/shop/issues/custom_isse_name$1;
}

@CybolicバージョンのあるDockerイメージでこれをテストしました1.10.3が、問題ありませんでした。構成ファイルを何とか提供できますか?あなたはおそらく何かを逃しています。
Mohammad AbuShady 2017

34

いくつかのリダイレクトを複製する必要がある場合は、マップの使用を検討してください。

# map is outside of server block
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ファイルを置き換える優れた方法です。
カリブのジョシュ、2015年

3
このマップアプローチを既存の場所/ ... proxy_passタイプのセットアップとどのように組み合わせますか?
Michael Dausmann、2015年

この@redirect-map場所でif ($redirect_uri = "") {return 404;}は、proxy_passを続けて試すことができます。を使用して書き換える必要がある場合があり$redirect_uriます。
Cole Tierney、2015年

これはlocation、セットアップによっては2つのブロックの代わりに必要になる場合があります。これは例えばCraft CMS用です。location ~ ^(.*)$ { if ($redirect_uri) { # redirect if the variable is defined return 301 $redirect_uri; } try_files $uri $uri/ /index.php?p=$uri&$args; }
luwes 2016
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.