Как перенаправить URL-адрес в NGINX

Мне нужно перенаправить каждый 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;
            }
    }

Ответ 1

Лучший способ сделать то, что вы хотите, - добавить еще один серверный блок:

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

И отредактируйте переменную main_сервера server_name следующим образом:

server_name  www.test.com;

Важно: Новый блок server - это правильный способ сделать это, if является злым. Вы должны использовать местоположения и серверы вместо if, если это возможно. Rewrite иногда зло тоже, поэтому заменил его на return.

Ответ 2

Как и в случае с другим ответом, но измените http в переписывании на $-схему следующим образом:

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

И отредактируйте переменную main_сервера server_name следующим образом:

server_name  www.test.com;

Мне пришлось сделать это, чтобы перенаправить www.test.com на test.com.

Ответ 3

Сначала убедитесь, что вы установили 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;
            }
    }