拥有多个域名后的烦恼。

需求

我有一个用我真名命名的域名,姑且称为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)和链接跳转等功能。免费版下,每个域名有三条规则的上限,不过对于现有需求来说也够用了。

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

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

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

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

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

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

  • *即通配符,在此位置上的任意字符都会被判定为符合规则。比如blog.example.comwww.example.comexample.com/foobar都会匹配到*example.com/*这条规则,而example.com/foobarwww.example.com/foobar就不会匹配到*example.com/这条规则。

  • $类似于参数,$1代表着if中第一个*里的字段,以此类推,$2就是第二个*中的字段。例如https://example.com/foobar在上述example.com的规则一里,$1就是「https://」,$2就是「foobar」。

DNS 解析记录

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

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

参考