域名CNAME记录不能同时适配根域名和www的解决方法

问题

CNAME 记录一般情况是不能设置 www 和根域名同时适配的,只能添加 www 记录,为了解决这个问题,就需要用到边缘 JavaScript 。

解决

边缘 JavaScript

很多 cdn 商家都提供边缘 JavaScript 的功能。

  1. 比如 Cloudflare ,就提供一个 workers 功能,可以让用户在访问到源站前执行一个边缘的 JavaScript 脚本(在 cdn 的节点上执行),这就为很多操作提供了可能,比如跳转。
  2. 比如阿里云也有 EdgeRoutine 功能,是一个边缘 Serverless 计算环境,也可以提供边缘的 JavaScript,其他商家自行探索。

下面就简单介绍下 Cloudflare 的边缘 js 功能,因为他是不收费也可以使用的。

使用 workers
  1. 先切换到 workers 栏,管理 workers 并添加一个脚本。
    在这里插入图片描述
  2. 编辑你的 js 脚本代码如下:
addEventListener('fetch', event => {
  event.respondWith(handleRequest(event.request))
})

/**
 * Respond to the request
 * @param {Request} request
 */
async function handleRequest(request) {
  const init = {
    headers: {
      'content-type': 'text/html;charset=UTF-8',
    },
  }
  return new Response(renderHTML(), init);
}

function renderHTML() {
  return `<!DOCTYPE html>
  <script>
  window.location.href = 'https://domain.com'
  </script>`
}
函数作用
addEventListener脚本自带的,提供一个类似 fetch api
handleRequest需要异步执行,并且给 html 响应头,否则返回的是纯文本
renderHTML返回 html 页面,并给出跳转
  1. 管理路由,进入添加一条 www 规则的路由,再添加一条根域名的路由。
    在这里插入图片描述

    在这里插入图片描述

  2. 用 A 记录解析主域名与 www 域名,必须要解析 ip 地址才能运行边缘 js,否则 dns 上都没有这条记录是没法分发到 cdn 节点执行 js 的,当然,解析的 ip 随意,比如 8.8.8.8 。
    在这里插入图片描述

至此就可以等待解析生效访问根域名与 www 域名进行跳转了,当然,不同的 js 也可以做不同的事情,有什么需求就写什么 js ,甚至识别不同 url 做手动分发等。

思考

  1. 可以用边缘 js 来做很多事情,比如博客,当然,要自己规划资源,毕竟免费版只提供一个 js 可写,所有的内容都要包括,付费版可以有自己的存储空间。
  2. cdn 是可以一定程度上防 d 的,或者安排自己的防火墙规则,这是好处。
  3. cloudflare 是减速器,人人皆知,这是坏处。
  4. cloudflare 偶尔炸过,毕竟是免费的服务,可以选择购买付费版(昂贵)。

其他

可能说只为了跳转这个需求的话,那直接做 url 重定向或者 301/302 就好了,话虽如此,如果域名还配备了域名邮箱服务的二级 CNAME 记录的话,就不能用全站跳转,也就是说,这种方式可以很好的实现有其他二级域名提供服务的同时只对我们需要的进行跳转。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值