Nginx的 – 重写或返回redirect?

我有两个select(返回和重写)redirect,我不知道哪些是性能,search引擎优化等build议:

## 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一起工作,但在浏览器调用时不会redirect,并且返回码是临时redirect的,即使rewrite指令被设置为permanent

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

你的select1:

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

正是你想要的。

不知道为什么rewrite ^ http://$host$request_uri? permanent; rewrite ^ http://$host$request_uri? permanent; 行会导致302而不是301.这是强制它返回301的正确语法。