我有两个重定向选项(返回和重写),但我不确定哪一个更适合性能、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 一起使用,但在浏览器调用时它不会重定向,并且返回代码是临时重定向,尽管重写指令设置为permanent
:
curl -I example.com
HTTP/1.1 302 Moved Temporarily
Server: nginx
...
Location: http://www.example.com/
...
答案1
您的选择 1:
return 301 $scheme://$host$request_uri;
正是您想要的。
不确定为什么该rewrite ^ http://$host$request_uri? permanent;
行会导致 302 而不是 301。这是强制其返回 301 的正确语法。