web-dev-qa-db-ja.com

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

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;
            }
    }
132
Amal Kumar S

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

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に置き換えます。

267

ここで別の答えに似ていますが、書き換えで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にリダイレクトするためにこれをしなければなりませんでした。

まず、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;
            }
    }
9
Amal Kumar S