143

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

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

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

しかし、ブラウザでは

ページが正しくリダイレ​​クトされない

Firefox は、サーバーがこのアドレスへのリクエストを決して完了しない方法でリダイレクトしていることを検出しました。

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

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

4 に答える 4

283

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

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ます。

于 2012-04-24T18:29:54.293 に答える
10

まず、Nginx と HTTP 書き換えモジュールがインストールされていることを確認してください。これをインストールするには、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;
            }
    }
于 2012-04-24T09:57:55.913 に答える