网站换域名:借助三条跳转规则,实现真真正正的301重定向

2023-09-16 09:14:15 1点赞 27收藏 3评论

事情起因:.com域名价格不断上涨,所以打算把非凡博客的域名更换为.cn域名,前两天已经完成新域名的备案了,为了确保将旧域名的权重传递到新域名,借助腾讯云的显性URL设置了301跳转,关于这种跳转的设置方法可以参考《设置域名A重定向301跳转到域名B不生效?有一个细节你可能忽略了》。

不过这样直接通过域名解析实现301重定向有一个问题,那就是跳转前的域名不支持HTTPS,以我自己的网站为例,也就意味着这种方法实现的效果是:

1.png1.png

如果仅仅是将HTTP的旧域名跳转到新域名,那么在百度站长工具设置网站改版的时候,也必须将旧域名退出HTTPS,否则规则会校验不成功。

2.png2.png3.png3.png

但我还是希望能够找到一种可以实现完整重定向的方法,于是开始尝试修改服务器端重定向的规则文件,最终找到了两种方法可以实现HTTP和HTTPS两种协议头旧域名都能跳转到新域名的效果。

解决方案一:

我的服务器端使用的是LNMP环境,以下列出的跳转规则也仅适用于nginx。

1.旧域名和对应的网站目录、网站文件、网站数据库均保持不动,也就是保持旧网站可以正常访问。

2.将新域名解析至网站服务器,同时在服务器中添加新的网站目录环境,将旧域名的所有网站文件全部复制到新网站目录中,对应的数据库文件也导出,然后再导入到新网站的对应数据库中,也就相当于把旧网站完全复制了一份,实现的效果是新域名可以访问复制的网站。

3.找到nginx的配置文件,默认是在/usr/local/nginx/conf/vhost/旧域名.conf

4.png4.png

4.通过vi或vim编辑器访问旧域名的配置文件,如果已经安装了SSL证书,这里应该已经自动添加了以下规则:

server

{

listen 80;

listen 443 ssl;

}

我们要做的是在server下的括号中添加跳转规则:

if ( $scheme = "http" ) {

return 301 https://新域名$request_uri;

}

#http协议头的旧域名跳转到https新域名

if ( $scheme = "https" ) {

return 301 https://新域名$request_uri;

}

#https协议头的旧域名跳转到https新域名

location / {

rewrite ^(.*)$ https://新域名$1 permanent;

}

#旧域名的内页全部跳转到https新域名对应内页

注意把上面规则中的域名更换为自己的新域名。

5.png5.png

解决方案二:

方案一是通过协议头识别要跳转的旧域名,方案二可以通过具体的域名进行识别,可以采用以下规则:

if ( $host = "不加www的旧域名" ) {

return 301 https://新域名$request_uri;

}

#不论协议头是http还是https,不加www的旧域名都会跳转到新域名

if ( $host = "加www的旧域名" ) {

return 301 https://新域名$request_uri;

}

#不论协议头是http还是https,加www的旧域名都会跳转到新域名

location / {

rewrite ^(.*)$ https://新域名$1 permanent;

}

#旧域名的内页全部跳转到https新域名对应内页

注意把上面规则中的域名更换为自己的新域名。

以上两种方案任选一种即可,最终实现的效果可以参考当前非凡博客的域名重定向效果。

作者声明本文无利益相关,欢迎值友理性交流,和谐讨论~

展开 收起
3评论

  • 精彩
  • 最新
  • 解析那边做跳转不就行了?或者用alb做下规则转换。你这个其实后期也是要改掉的,理论上服务器部分尽量保持不变为好。

    校验提示文案

    提交
    建议你试试再说…看看解析做跳转的话 https能不能跳

    校验提示文案

    提交
    收起所有回复
  • @羽度非凡 大佬,.com和.cn的能差多少钱?您也太节省了啊

    校验提示文案

    提交
提示信息

取消
确认
评论举报

相关文章推荐

更多精彩文章
更多精彩文章
最新文章 热门文章
27
扫一下,分享更方便,购买更轻松