Nginx 旧域名跳转到新域名的设置方法
这两天已经把我之前的一个网站整合了进来,做了一次两个 WordPress 的合并,所有的数据都保留下来了。数据搞定之后,很重要的一步就是设置旧域名向新域名的 301 跳转,否则之前旧站的访问量会全部丢失,也严重影响 SEO。
我 VPS 上用的是 Nginx 服务器,接下来进行配置。开始之前,先补充点知识。
301 和 302 跳转的区别
301跳转:永久性转移(Permanently Moved)
302跳转:暂时性转移(Temporarily Moved)
共同点:二者都表示重定向,浏览器在获取服务器的返回码后会自动根据头部的Location值跳转到新的URL地址;
不同点:301表示旧地址被永久地移除了,已经不可访问;302表示旧地址还在,只是临时进行跳转,后续还是访问旧地址。
Nginx 设置旧域名301跳转到新域名
Nginx 里的 rewrite 模块是专门负责静态重写的。基本用法是:rewrite patten replace flag。patten是正则表达式,与patten匹配的URL会被改写为replace,flag可选。例如将旧域名跳转到新域名上:
server { listen 80; server_name www.old.com; rewrite ".*" https://ihacksoft.com; }
如果是跳转到新域名上时要保留路径,那么:
server { listen 80; server_name www.old.com; rewrite "^/(.*)$" https://ihacksoft.com/$1; }
还有一种方式,如果域名不是 ihacksoft.com 就统一转到 https://ihacksoft.com:
server { listen 80; server_name ihacksoft.com ihacksoft.com ihacksoft.com www.ihacksoft.com ; if ($host != 'ihacksoft.com') { rewrite ^/(.*)$ https://ihacksoft.com/$1 permanent; } }
也可以单独增加一个 Server,在里面统一设置,permanent 是301跳转:
server { listen 80; server_name ihacksoft.com ihacksoft.com www.ihacksoft.com; rewrite ^/(.*)$ https://ihacksoft.com/$1 permanent; }
rewrite 与 location 配合实现图片文件跳转到cdn:
location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$ { expires 30d; rewrite "^/uploadfile\/(.*)$" https://cdn.ihacksoft.com/uploadfile/$1; }
rewrite 正则表达式 替换目标 flag标记:
last – 基本上都用这个 Flag,相当于 Apache 里的 [L] 标记,表示完成 rewrite。
break – 中止Rewirte,不再匹配后面的规则。
redirect – 返回302临时重定向,地址栏会显示跳转后的地址。
permanent – 返回301永久重定向 地址栏会显示跳转后的地址。