博客更换域名后利用Nginx实现完美301跳转

说起博客网站更换域名来,可以说很多站长们几乎都很少碰到过,但是随着博客网站的发展,更换域名是个不可避免的事儿,所以了解和学习好域名更换要注意的事项也是很有必要的。最近明月就遇到这样的事儿了,更换为新的域名后在301跳转这里卡壳了,折腾了近三天才算是彻底的搞定,今天就将明月自己的这些经历为基础给大家仔细的讲解和分享一下,也当做明月自己折腾服务器的一次学习笔记。

301.jpg

首先,要理解域名 301跳转 的意义和原理

301跳转是指页面永久性移走,又叫301重定向:是一种非常重要的“自动转向”技术。网址重定向最为可行的一种办法。当用户或搜索引擎向网站服务器发出浏览请求时,服务器返回的HTTP数据流中头信息(header)中的状态码的一种,表示本网页永久性转移到另一个地址。

301重定向是在搜索引擎优化中一个很常用的操作,可以帮助我们转移域名的权重。

301跳转主要职能“域名转向”

路由选择的变化也是对数据报文经由路径的一种重定向。

在我们网站建设中,时常会遇到需要网页重定向的情况:像网站调整,改变了网站的目录结构,网页被移到一个新地址。或者网页扩展名改变,如因应用需要把.php改成.Html或.shtml,在这些情况下,如果不做重定向,则用户收藏夹或搜索引擎数据库中旧地址只能让访问客户得到一个404页面错误信息,访问流量白白丧失。又比如某些注册了多个域名的网站,也需要通过重定向让访问这些域名的用户自动跳转到主站点,等等。

常用的重定向方式有: 301 重定向, 302 重定向

301 重定向:301代表永久性转移(Permanently Moved),301重定向是网页更改地址后对搜索引擎最友好的方法,只要不是暂时搬移的情况,都建议使用301来做转址。

302 重定向:302代表暂时性转移(Temporarily Moved ),在前些年,不少Black Hat SEO曾广泛应用这项技术作弊。各大主要搜索引擎均加强了打击力度,像Google对BMW德国网站的惩罚。即使网站客观上不是spam,也很容易被搜寻引擎误判为spam而遭到惩罚。

seo.jpg

301重定向的意义

  1. 网站改版完成,先将新版上线,在线上保持一段时间新旧内容共存。
  2. 新旧内容同时存在一段时间,且新版内容已开始收录后,对新旧内容设置301跳转,将旧版内容指向新版对应内容。
  3. 301重定向有利于网站首选域的确定,对于同一资源页面多条路径的301重定向有助于URL权重的集中。

按照上述操作方式在现有情况下能够尽可能的降低网站因改版带来的流量损失,提高用户体验度,同时有利于网站优化。

3012.jpg

明月更换域名的经历心得

好了,理论说了这么多其实就是要求大家一定要明白了原理后在动手实施,似是而非情况下的动手实操很容易造成不可挽回的损失的。特别是涉及域名、服务器这些重要的生产环境和元素的时候,大家一定要慎重!这都是明月“血淋淋”的教训换来的心得呀!୧(๑•̀⌄•́๑)૭

言归正传,明月自己的这次域名更换其实也不复杂,就是将现有的博客域名(lnmp.ymanz.com,已经启用SSL加密协议的)替换为全新申请备案的独立域名(www.imydl.tech,同样启用了SSL加密协议的),刚开始明月使用的是 CloudXNS 域名解析平台提供的 301跳转来实现重定向的,Nginx里只有imydl.tech跳转到www.imydl.tech的(301重定向)配置,测试后发现只有老域名不是SSL加密的https协议时候才能实现 301跳转 ,也就是说必须是 http://lnmp.ymanz.com 这样的老域名链接才会被301跳转到新域名 https://www.imydl.tech 这很不科学呀!有没有!没有办法了,为了尽快在百度站长平台提交“网站改版”就只能暂时在百度站长平台里取消https了(HTTPS退场),这样至少可以保证百度在“网站改版”的时候可以接受新旧域名更换的改版规则进入索引库域名更改阶段。

第二天继续折腾上述301重定向中存在的问题,仔细的分析了一下我感觉上述的问题应该是 CloudXNS 解析里的301跳转造成的,也就是说DNS解析里的301跳转回存在“兼容性”的问题,比如这个https的跳转就无法通过DNS解析的301来实现,毕竟https是需要SSL证书验证这个环节的,DNS解析里就没有这个东西,当然就会出错了!看来要实现完美的301跳转必须还是得在Nginx里想办法了,无论是百度还是谷歌发现都是Nginx里有关http跳转到https的,几乎没有一个像明月这样的应用场景的。没有办法只能在知乎思否上求助高手了,最后还是思否上一个大咖给出的办法完美的实现了,下面明月就贴出相关的Nginx配置文件供大家学习参考:

首先需要部署好新旧域名的解析和Nginx里的配置,具体要求如下:

  • 取消 CloudXNS 里的301跳转解析,老域名一律指向新域名服务器IP。
  • 所有的301重定向跳转一律在Nginx里设置实现。
  • 无论新旧域名都需要有有效的SSL证书并且在Nginx里的[server]指定好证书的绝对路径,保证Nginx可以找到使用。
  • 老域名独立的[server]段定义要存在于新域名的Nginx配置文件里
server
        {
        listen 443 ssl http2;
        server_name www.imydl.tech;
        server_tokens   off;
        ……
}

此处省略新域名的具体配置,节省篇幅嘛

下面是老域名的[server]定义

server
        {
        listen 80; #监听80端口,保证`http://老域名`这样的形式可以被识别并301跳转到新域名。
        listen 443 ssl;#监听443端口,保证`https://老域名`这样的形式可以被识别并301跳转到新域名。
        server_name lnmp.ymanz.com;
        #这里声明的SSL证书就是为了保证`https://老域名`这样的形式可以被识别并301跳转到新域名。
        ssl_certificate //ssl/lnmp.ymanz.com.cer;
        ssl_certificate_key //ssl/lnmp.ymanz.com.key;                            
        #这里通过条件判断凡事http前缀开头的老域名请求一律301跳转到新域名。
        if ( $scheme = "http" ) {
                return 301 https://www.imydl.tech$request_uri;
        }
        #替换老域名链接为新域名链接,比如:https://lnmp.ymanz.com/123.html替换为https://www.imydl.tech/123.html
        #完全自动化的智能链接重写替换,访问这几乎是感觉不到的实现301跳转,这里主要是针对文章、页面等各类老域名链接网址的。
        location / {
        rewrite ^(.*)$  https://www.imydl.tech$1 permanent;
        }
}

PS:如果你要使用上述的配置,请记得替换相关信息为自己的域名哦!

完成后保存退出,重启Nginx生效。因为修改了解析里的老域名解析,所以受制于解析生效时间,这个301跳转实现可能会存在一定的延时,耐心等待解析全网生效即可。

通过curl在命令行里验证301跳转是否生效

curl -I https://lnmp.ymanz.com

当看到如下输出信息时即表明301跳转已经实现了!

HTTP/1.1 301 Moved Permanently
Server: nginx
Date: Mon, 12 Feb 2018 05:51:28 GMT
Content-Type: text/html
Content-Length: 178
Connection: keep-alive
Location: https://www.imydl.tech/

注意查看第一行的HTTP/1.1 301 Moved Permanently即表明这个请求被301重定向了。最后一行的 Location 显示的是重定向后的网址。

我们再测试一下文章或者页面链接是否也可以301跳转

curl -I https://lnmp.ymanz.com/cross.html

输出结果:

HTTP/1.1 301 Moved Permanently
Server: nginx
Date: Mon, 12 Feb 2018 05:53:54 GMT
Content-Type: text/html
Content-Length: 178
Connection: keep-alive
Location: https://www.imydl.tech/cross.html

可以看到最后一行的 Location 显示的是重定向后的网址为https://www.imydl.tech/cross.html,正好是新域名对应的链接。完美实现了301跳转。

新老域名更换301跳转的重要意义

通过上述的验证后,大家应该就理解了新老域名更换后301跳转重定向的重要意义,总结下来就是老域名的外链资源不会浪费都被永久的强制301重定向到了新域名下,这对新域名快速获得老域名的收录和权重都有很大的帮助,就是告诉搜索引擎这两个域名都是一样的内容只是域名进行了更换,这样无论是搜索引擎里是否提供了更换域名的服务,随着时间的推移,慢慢的搜索引擎就会将老域名都指向新域名,这样更换域名造成的SEO方面的损失就会讲到最低。

最后再强调一下,这个301跳转重定向建议大家长期保存直至新域名的流量和搜索权重恢复到老域名同等水平的时候再取消,明月是建议大家长期保留的,如果老域名本是是SSL加密协议的https的话,记得要及时更新SSL证书确认为都是最新有效期的证书即可(专指Let's Encrypt证书一类)。

好了,今天就讲到这里了,终于放假了,可以好好的更新博客了!哈哈!不说了,我家狗狗在洗澡呢还等我去接呢!走了,有啥不明白的记得评论里留言哦!我会及时回复的!

最后修改:2018 年 02 月 12 日 02 : 10 PM
如果觉得我的文章对你有用,请随意赞赏

4 条评论

  1. 懿古今

    我当初都是直接在nginx添加代码的,幸好那时候一次性通过。

    1. 明月登楼
      @懿古今

      现在看来,直接在Nginx里设定301是最好的!兼容性最好至少是!就是那些正则我是一看就晕菜了!

  2. 西枫里博客

    多数DNS都不具备301的解析功能吧?
    这个要么web服务器设置,要么程序设置~

    1. 明月登楼
      @西枫里博客

      是的, CloudXNS 比较另类!我就是因为这个想偷个懒的没有想到……!

发表评论