用 CloudFlare 重定向

需求

我有一个用我真名命名的域名,姑且称为 xiaoming.com。有一个圈名命名的域名,姑且称为 example.com。

  • 将 xiaoming.com/ 和 www.xiaoming.com/ 的请求 301 重定向到 example.com/about
  • 向下兼容以前在 xiaoming.com 下创建过的文章链接
  • www.example.com 的请求全部重定向到 example.com

配置

页面规则(Page Rules)

CloudFlare 有一个强大的功能,叫做 Page Rules,它可以实现链接匹配并进行一些特殊操作,例如:始终使用 HTTPS、始终在线(always online)和链接跳转等功能。注 1

免费版下,每个域名有三条规则的上限,不过对于现有需求来说也够用了。

首先打开 CloudFlare 面板 > xiaoming.com > Page Rules 来创建两条规则:

  1. If:*xiaoming.com/,then:https://example.com/about
  2. If:*xiaoming.com/*,then:https://example.com/$2

因为规则是顺位匹配的,所以在添加规则时,一定要注意规则的排序。

同样,打开 example.com 的 Page Rules:

  1. If:*example.com/*,then:https://example.com/$2

上述几条规则对于有编程经验的人来说应该不难理解,这里稍微做一些说明:

  • * 即通配符注 2,在此位置上的任意字符都会被判定为符合规则。比如 blog.example.com、www.example.com 和 example.com/foobar 都会匹配到 *example.com/* 这条规则,而 example.com/foobar 和 www.example.com/foobar 就不会匹配到 *example.com/ 这条规则。
  • $<num>注 3 类似于参数,$1 代表着 if 中第一个 * 里的字段,以此类推,$2 就是第二个 * 中的字段。例如 https://example.com/foobar 在上述 example.com 的规则一里,$1 就是「https://」,$2 就是「foobar」。

DNS 解析记录

一开始在这里百思不得其解,没有解析记录的域名当然是无法被解析的,访问时找不到 IP,当然没法跳转。注 4

所以我们需要新建 www.xiaoming.com、xiaoming.comwww.example.com 这三条解析记录,在这里我将解析类型设为 CNAME,值设为了 example.com,而 CDN 保持默认开启状态,否则可能会出现证书问题。至此,我们设定的 Page Rules 就生效了。

参考

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×