Как перенаправить url в NGINX



мне нужно перенаправить каждый http://test.com запрос к http://www.test.com. Как это можно сделать.



в серверном блоке я попытался добавить



 rewrite ^/(.*) http://www.test.com/ 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/ permanent;
#rewrite ^(.*)$ $scheme://www.test.com;

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

3 ответов:

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

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;

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

похоже на другой ответ здесь, но измените 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.

сначала убедитесь, что вы установили Nginx с модулем перезаписи HTTP. Для установки этого нам нужно иметь pcre-библиотеку

Как установить библиотеку pcre

Если вышесказанное сделано или если они у вас уже есть, то просто добавьте приведенный ниже код в свой серверный блок nginx

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

удалить www из каждого запроса, вы можете использовать

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

Так что ваш серверный блок будет выглядеть

  server {
            listen       80;
            server_name  test.com;
            if ($host !~* ^www\.) {
                    rewrite ^(.*)$ http://www.$host 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;
            }
    }

Comments

    Ничего не найдено.