[redirect] 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;
            }
    }



답변

원하는 것을 수행하는 가장 좋은 방법은 다른 서버 블록을 추가하는 것입니다.

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.


답변

여기에 다른 답변과 비슷하지만 다시 쓰기에서 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 rewrite 모듈과 함께 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;
            }
    }


답변

이것은 “nginx redirect”에 대한 Google의 인기입니다. 여기에 단일 위치를 리디렉션하려는 경우 :

location = /content/unique-page-name {
  return 301 /new-name/unique-page-name;
}


답변