Nginx-재 작성 또는 리디렉션을 위해 반환 하시겠습니까? 1

리디렉션에 대한 두 가지 옵션 (반환 및 다시 쓰기)이 있으며 성능, SEO 등에 권장되는 옵션이 확실하지 않습니다.

## Redirect from non-www to www
server {
        server_name example.com;
        # Option 1
        return 301 $scheme://$host$request_uri;

        # Option 2
        rewrite ^ http://$host$request_uri? permanent;
    }

## Default server config

server {
        ...
        listen      192.168.1.1:80 default_server;
        root        /www;
        server_name www.example.com;

옵션 2는 curl에서 작동하는 것처럼 보이지만 브라우저에서 호출 할 때 리디렉션되지 않으며 리턴 코드는 rewrite 지시문이 다음으로 설정되어 있지만 임시 리디렉션의 코드입니다 permanent.

 curl -I example.com
 HTTP/1.1 302 Moved Temporarily
 Server: nginx
 ...
 Location: http://www.example.com/
 ...



답변

당신의 선택 1 :

return 301 $scheme://$host$request_uri;

정확히 당신이 원하는 것입니다.

rewrite ^ http://$host$request_uri? permanent;라인이 301 대신 302가 될지 잘 모르겠습니다 . 이것이 301을 반환하도록하는 적절한 구문입니다.


답변

기술적으로 두 옵션을 모두 사용할 수 있습니다. 그들은 일할 수 있습니다.

에 따르면 Nginx에 문서 , 사용 return할 수 있다면 . NGINX가 요청 처리를 중지하고 정규식을 처리 할 필요가 없기 때문에 더 간단하고 빠릅니다. 그 이상, 3xx 시리즈 에서 코드를 지정할 수 있습니다 .

return (301 | 302 | 303 | 307) url;

정규식으로 URL의 유효성을 검사해야하거나 원래 URL의 요소 (해당 NGINX 변수에없는 요소)를 캡처해야하는 시나리오가있는 경우을 사용해야합니다 rewrite. rewrite코드 301 또는 302 만 반환 한다는 것을 알아야합니다 .

rewrite regex URL [flag];

반품재 작성 에 대한 자세한 내용 은 NGINX 웹 사이트를 참조하십시오.


답변