三分钟,带你学习和实践域名重定向

大家好,我是鱼皮,今天分享 重定向 小知识,以及我在腾讯云云开发中实现域名重定向的实践。

孽起

之前,我开发了一个编程导航网站,将网站放到了腾讯云云开发上,用云托管(容器)的方式部署和维护。还购买了一个域名 code-nav.cn,并且在云开发后台 访问服务 中,将该域名的子域名 www.code-nav.cn 和存放网站文件的容器相关联,配置如图:

然后,大家就能通过网址 www.code-nav.cn 访问该网站了。

但是,很快,我就发现了一个严重的问题。

有不少同学想要访问我的网站,但是,由于他们输入的网址是 code-nav.cn,省略了网址前缀 www,导致网站无法访问。也让我流失了一批用户。

初战 —— 域名配置

要解决这个问题,其实很简单,之前是配置 www 子域名指向容器,那在云开发后台再加一条配置,直接将购买的域名(父域名)code-nav.cn 也指向容器,不就成了么?

配置如下:

这样,无论用户是否输入 www 前缀,都能够访问到我们的网站啦!

看似非常完美,但目前,网站其实还存在一定问题

现存问题

首先,带 www 与不带 www 其实是两个不同的网址,虽然对用户来说,感觉是访问了同一个网站。但对于搜索引擎,小蜘蛛们会把他们识别为两个不同的网站,并且分别收录这两个路径下网站的内容,导致权重分散。虽然对流量小的网站来说影响不大,但对于大站点,这是必须要处理的问题。

此外,访问 code-nav.cn(不带 www)的用户反映,网站上的数据无法加载。这是因为,腾讯云云开发的 WEB 安全域名限制,只有在白名单内的域名才允许访问云资源(数据、文件等),因此,还要在 安全配置 中,补上 code-nav.cn 域名。

虽然现在访问正常了,但是如果业务中还有一些和 www 网址强相关的逻辑,比如判断用户访问的网址必须是 www.code-nav.cn 才允许登录,那么你还要去修改代码,考虑稍有不周,就会导致一些功能出现问题。

为解决这些问题,我们可以使用 重定向 技术。

重定向

重定向是一个很广泛的概念,即通过各种方法将各种网络请求重新定个方向转到其它位置,比如网页重定向、域名重定向、数据报文重定向等。

在网站开发中,重定向的应用场景太多了,比如用户未登录时,将它输入的网址自动跳转为登录页;用户访问旧版网址时,自动跳转到新版网页。重定向不仅是导游,也是一名霸道的保安。

因此,很多大站点都会采用重定向技术。比如访问百度 baidu.com,按 F12 查看开发者控制台,可以看到网址通过 302 重定向,自动跳转为了 www.baidu.com

那问题就来了,啥是 302 重定向?

不妨看一看常见的重定向 HTTP 状态码。

重定向 HTTP 状态码

和重定向有关的 HTTP 状态码主要是 301、302、303、307、308,最常用的是 301 和 302,可以看看 MDN 官方对它们的解释。

301 是永久重定向(Moved Permanently)说明请求的资源已经被 永久 移动到了由 Location 头部指定的 url 上,是固定的不会再改变,搜索引擎会根据该响应修正。

而 302 是暂时性转移(Moved Temporarily,或者 Found),表明请求的资源被 暂时 移动到了由 Location 头部指定的 URL 上。浏览器会重定向到这个 URL, 但是搜索引擎不会对该资源的链接进行更新。

虽然 301 和 302 都能够将用户输入的网址 A, 改为重定向后的网址 B,但他们还是有区别的:

  • 搜索引擎区别:301 表示原地址 A 的资源已被移除,永远无法访问,搜索引擎抓内容时会将网址 A 全部替换为 B;而 302 表示网址 A 还活着,搜索引擎会在抓取网址 B 新内容的同时,保留网址 A 的记录。
  • 安全性:302 跳转有网站劫持的风险,导致网站被盗用。

再战 —— 云开发重定向实践

了解重定向之后,来试试怎么实现重定向,以及如何在云开发中实现域名重定向。

实现重定向的方式有很多,很大程度上依赖于你使用的 web 服务器,比如 Nginx、Apache、Tomcat 等,一般在服务器中添加几条配置即可。

我的编程导航网站是以容器的方式,部署在云开发提供的云托管功能上的。我把开发好的网站文件和提供 web 服务的 Nginx 服务器一起打包,做成了容器,于是,可以将每个容器当成一个小服务器,独立运行。

要支持重定向,只需要修改下 Nginx 的配置。比如这里我选择给整个网站添加 301 永久重定向,配置文件如下:

server {listen 80;# gzip configgzip on;...root /usr/share/nginx/html;include /etc/nginx/mime.types;# 添加重定向if ($http_host ~ "^code-nav.cn") {rewrite  ^(.*)    https://www.code-nav.cn permanent;}
}

不必手写和记忆 Nginx 配置,直接使用可视化界面生成即可:

详情参见这篇文章:轻松搞定 Nginx 配置代码的神器!

其他的服务器配置也可以自行查阅文档,这里不再赘述。

然后,在云托管上创建新版本,发布新的容器,就大功告成啦!

查看下效果,访问 code-nav.cn,网站重定向到了 www.code-nav.cn,完美!

总结

最后,回顾下在腾讯云云开发中实现域名重定向的完整过程,包括如下步骤:

  1. 访问服务 中添加父域名到网站的指向(云托管等)
  2. 安全配置 中添加父域名到白名单中
  3. 在 web 服务器中添加重定向配置
  4. 新建版本,部署发布

整个流程还是非常简单的~

如果本文对大家有帮助,请一定要给个 支持呀!❤️

通俗讲解【重定向】及其实践相关推荐

  1. 二维小波变换_小波变换完美通俗讲解系列之 (一)

    声明:该篇文章转自csdn,原始博主已经找不到了,在这里给出转载博主地址,如有侵权,请私信我删除. https://blog.csdn.net/liusandian/article/details/5 ...

  2. 网络编程懒人入门(九):通俗讲解,有了IP地址,为何还要用MAC地址?

    1.前言 标题虽然是为了解释有了 IP 地址,为什么还要用 MAC 地址,但是本文的重点在于理解为什么要有 IP 这样的东西.本文对读者的定位是知道 MAC 地址是什么,IP 地址是什么. (本文同步 ...

  3. 人工智能算法通俗讲解系列(二):逻辑回归

    2019独角兽企业重金招聘Python工程师标准>>> 今天,我们介绍的机器学习算法叫逻辑回归.它英语名称是Logistic Regression,简称LR. 跟之前一样,介绍这个算 ...

  4. Hadoop平台K-Means聚类算法分布式实现+MapReduce通俗讲解

        Hadoop平台K-Means聚类算法分布式实现+MapReduce通俗讲解 在Hadoop分布式环境下实现K-Means聚类算法的伪代码如下: 输入:参数0--存储样本数据的文本文件inpu ...

  5. 冲突域、广播域的通俗讲解

    冲突域.广播域的通俗讲解 1.冲突域(物理分段)         连接在同一导线上的所有工作站的集合,或者说是同一物理网段上所有节点的集合或以太网上竞争同一带宽的节点集合.这个域代表了冲突在其中发生并 ...

  6. 通俗讲解:图像傅里叶变换

    转自某乎:通俗讲解:图像傅里叶变换 - 知乎 这里我们主要要讲的是二维图像傅里叶变换,但是我们首先来看一张很厉害的一维傅里叶变换动图. 妈耶~厉害哇!它把时域和频域解释的很清楚! 什么!你看不懂! 简 ...

  7. 关于CSS浮动(float,clear)的通俗讲解(经验分享)

    很早以前就接触过CSS,但对于浮动始终非常迷惑,可能是自身理解能力差,也可能是没能遇到一篇通俗的教程. 前些天小菜终于搞懂了浮动的基本原理,迫不及待的分享给大家. 写在前面的话: 由于CSS内容比较多 ...

  8. vue标准时间改为时间戳_区块链科普005:什么是时间戳?白话通俗讲解时间戳是什么意思?...

    原标题:区块链科普005:什么是时间戳?白话通俗讲解时间戳是什么意思? 八宝饭区块链:什么是时间戳 时间戳是什么?可能很多人都没有听过,但是作为办公一族应该掌握这个技能.时间戳技术就是数字签名技术一种 ...

  9. Java多数据源最通俗讲解

    Java多数据源最通俗讲解 before after 理论 实操 编码 小总结 before 项目中可能会用到很多的数据源,例如目前这个项目中用到了五个数据源,那么数据源的 配置和数据源的切换就成为了 ...

最新文章

  1. 再度剖析AD账户新旧密码同时可用的问题
  2. Windows Server2008安装mysql5.6出现程序无法正常启动(0xc000007b)
  3. 1.3 用神经网络进行监督学习-深度学习-Stanford吴恩达教授
  4. Swift 中如何测试驱动开发
  5. Kotlin实战指南十三:协程
  6. python量化数据处理小细节(以后还会不断补充)
  7. 用C++实现十进制转二进制【个人思想】
  8. Python: 50个能够满足所有需要的模块
  9. 【CodeForces】741 D. Arpa’s letter-marked tree and Mehrdad’s Dokhtar-kosh paths(dsu on tree)
  10. Command(命令)
  11. 重构分析21: 被拒绝的遗赠(Refused Bequest)
  12. 大麦网滑块验证码自动识别
  13. 《可复制的领导力》思维导图读书笔记,提升职场竞争力
  14. html5中abbr,HTML 5 abbr 标签 - HTML 参考手册
  15. 华三交换机 流量镜像
  16. 凸优化工具包CVX快速入门
  17. 浅谈 Office 2013 App
  18. oracle中对于TableSpace理解
  19. 射频同轴连接器常用型号
  20. TFTLCD显示实验

热门文章

  1. mysql jar jdk1.6_Windows下JDK1.6+MySQL+MyEclipse开发环境的配置
  2. oracle 内存分配,Oracle调优修改10g,11g内存分配
  3. MySQL后初次密码_mysql第一次安装成功后初始化密码操作步骤
  4. mysql 5.7.13 安装配置方法图文教程(linux)
  5. 数据结构:在一个单链表中,若删除p指向节点的后继节点,则执行的操作为:( )
  6. 大数据技术之kafka (第 3 章 Kafka 架构深入) 分区策略在分析
  7. 悲观锁和乐观锁的区别和应用场景
  8. 从面试的这些细节就可判断公司的好坏
  9. 云环境下大规模分布式计算数据感知的调度系统
  10. 【2016年第4期】分布式协商:建立稳固分布式 大数据系统的基石