NGINXでURLをリダイレクトする方法


135

すべてのhttp://test.comリクエストをhttp://www.test.comにリダイレクトする必要があります。これはどのように行うことができますか。

サーバーブロックに追加してみました

 rewrite ^/(.*) http://www.test.com/$1 permanent;

しかし、ブラウザではそれは言います

  The page isn't redirecting properly

  Firefox has detected that the server is redirecting the request for 
  this address in a way that will never complete.

私のサーバーブロックは次のようになります

 server {
            listen       80;
            server_name  test.com;
            client_max_body_size   10M;
            client_body_buffer_size   128k;

            root       /home/test/test/public;
            passenger_enabled on;
            rails_env production;

            #rewrite ^/(.*) http://www.test.com/$1 permanent;
            #rewrite ^(.*)$ $scheme://www.test.com$1;

            error_page   500 502 503 504  /50x.html;
            location = /50x.html {
                    root   html;
            }
    }

公式ドキュメントは次の場所にあります:nginx.org/en/docs/http/converting_rewrite_rules.html
Marcello Nuccio

回答:


274

あなたが望むことをする最良の方法は、別のサーバーブロックを追加することです:

server {
        #implemented by default, change if you need different ip or port
        #listen *:80 | *:8000;
        server_name test.com;
        return 301 $scheme://www.test.com$request_uri;
}

メインサーバーブロックのserver_name変数を次のように編集します。

server_name  www.test.com;

重要:新しいserverブロックはこれを行う正しい方法であり、ifです。if可能であれば、場所とサーバーを使用する必要があります。Rewrite時には邪悪なこともありますので、に置き換えてくださいreturn


19
またreturn 301 http://wwww.test.com$request_uri;、書き換えの代わりにサーバーブロックを終了することもできます。
RCCola 2013

6
使用上の同上@RCCola returnの代わりにrewriteドキュメントを
JCotton 2013

質問、サーバーブロックの注文方法を教えてください。redirectその後、main serverブロックまたはmain serverブロック、その後redirect?同じ問題があるので、stackoverflow.com
questions / 35451929 /…

上記の質問のNginx構成は正しいです。順序は関係ありません。
Dmitry Verhoturov 2016

4
簡単な警告:301リダイレクトとに注意してください302。キャッシュされた永続的なリダイレクトでスタックする可能性があり、すでにURLにアクセスしたクライアントの設定を変更するのは非常に面倒です。(私はOPがを要求したことを知って301いますが、それが本当にあなたが望むものであることを確認してください。)
ニック・メリル

16

ここで別の答えに似ていますが、書き換えのhttpを$ schemeに変更します。

server {
        listen 80;
        server_name test.com;
        rewrite     ^ $scheme://www.test.com$request_uri? permanent;
}

メインサーバーブロックのserver_name変数を次のように編集します。

server_name  www.test.com;

www.test.comをtest.comにリダイレクトするには、これを行う必要がありました。


9

まず、HTTP書き換えモジュールを使用してNginxがインストールされていることを確認します。これをインストールするには、pcre-libraryが必要です。

pcreライブラリのインストール方法

上記の手順が完了した場合、または既にそれらを持っている場合は、nginxサーバーブロックに以下のコードを追加してください。

  if ($host !~* ^www\.) {
    rewrite ^(.*)$ http://www.$host$1 permanent;
  }

使用できるすべてのリクエストからwwwを削除するには

  if ($host = 'www.your_domain.com' ) {
   rewrite  ^/(.*)$  http://your_domain.com/$1  permanent;
  }

サーバーブロックは次のようになります

  server {
            listen       80;
            server_name  test.com;
            if ($host !~* ^www\.) {
                    rewrite ^(.*)$ http://www.$host$1 permanent;
            }
            client_max_body_size   10M;
            client_body_buffer_size   128k;

            root       /home/test/test/public;
            passenger_enabled on;
            rails_env production;

            error_page   500 502 503 504  /50x.html;
            location = /50x.html {
                    root   html;
            }
    }

2

これは「nginxリダイレクト」のGoogleでのトップヒットです。1つの場所をリダイレクトしたいだけの場合:

location = /content/unique-page-name {
  return 301 /new-name/unique-page-name;
}
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.