리디렉션에 대한 두 가지 옵션 (반환 및 다시 쓰기)이 있으며 성능, 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];