自定义域名 CNAME 到 dl.dropboxusercontent.com 失效的解决办法

之前有个 WordPress 博客里面的图片是放到 Dropbox Public 文件夹里面的,因为 Public 文件夹可以直接访问到里面的文件,就相当于外链,其中的文件都可以通过类似 https://dl.dropboxusercontent.com/u/582389/img/2016-08/image-01.jpg 这样的链接来直接访问。而为了美观或者个性化需要,可以通过自定义域名指定 CNAME 的方式将前面这个链接变成类似 https://cdn.seanchang.org/u/582389/img/2016-08/image-01.jpg 这样的。这种操作方式在之前是有效的,我那个博客就是这么做的。但是后来可能是 Dropbox 方面的原因,这种方法失效了,结果就是我博客里面的图片全部挂掉了,现在(Chrome 下)访问自定义域名会出现类似下图的错误提示:

错误提示的截图

那么如何才能让挂掉的图片重新显示呢?有两种办法,一种是更改 WordPress 数据库,直接把自定义域名部分替换成 Dropbox 的 dl.dropboxusercontent.com。另一种是在网站服务器上设置一个 301 重定向,将自定义域名的请求跳转到 dl.dropboxusercontent.com

显然,修改数据库的办法实施起来有些麻烦,在服务器上 301 重定向要简单一些,但是在某些特殊情境下可能这两种办法都不具备可操作性,难不成要一篇一篇文章的手动来更改?手动修改的话,工作量就太艰巨了。在这里我推荐一种迂回的办法,通过 CloudFlare 的自定义规则来设置 301 重定向。本质上也是 301 重定向,但是不用在服务器或者虚拟主机上操作。当然,这种方法的前提是域名需要交给 CloudFlare 来解析,域名的 NS 记录需要改成 CloudFlare 的。

我的域名本来就是用的 CloudFlare,所以直接在 Page Rules 菜单下添加规则就行了,需要添加的是网址转发规则,具体如下图:

规则设置的截图

需要注意的是,如上面截图中所示,自定义域名 p.***.me 中的二级域名 p 需要在 CloudFlare 有解析记录,这样 CloudFlare 才能应用规则,如果没有记录,不存在 DNS 解析,规则就无从谈起。设置好规则后保存并应用,再试着打开之前失效的图片链接,就会发现自动跳转为 dl.dropboxusercontent.com 的链接了。

301重定向成功的截图