Skip to content

How to handle old images

Ivan Chou edited this page May 13, 2019 · 12 revisions

启用插件导致老图片无法访问如何处理

如果你的站点在使用本插件之前,已经有很多内容和图片了,那么在刚启用插件的时候,可能一定会遇到一个尴尬的情况:

这插件什么鬼,我的图片全都显示不出来了

不用着急,其实这是常规操作。

缘由

插件为了不对 WordPress 本身的数据产生任何影响,并没有添加新的字段来标识哪些文件是已经上传了 OSS 的,所以会在 WordPress 获取附件(图片)Url 做全局的修改,因而导致使用插件之前的附件也被替换成了 OSS 地址,但 OSS 上不存在对应的文件,于是 404。

解决方案

1. 设置 OSS 回源

1.1 当插件「存储路径/Storage Path」设置为以下情况时

插件「存储路径」 回源 host 回源 path 文件名前缀(可选)
/ or [empty] your-site.com wp-content/uploads/
uploads your-site.com wp-content/ /uploads
wp-content/uploads your-site.com /wp-content/uploads

1.2 当插件「存储路径/Storage Path」为自定义路径时

比如「存储路径」为 blog/, WordPress 目录是 /www/wordpress/

回源请求的 url 则为:http://your-site.com/blog/image.jpg

文件实际位置则是:/www/wordpress/wp-content/uploads/image.jpg

此时无法只通过 OSS 后台的设置实现回源,需要搭配以下两种方法之一来完成

  • 方法一:设置 Nginx 规则 (Apache 同理)
location /blog {
    root  /www/wordpress/wp-content/uploads
}
  • 方法二:通过 ln -s 来实现回源目录的软链接, 对应的命令是:
ln -s /www/wordpress/wp-content/uploads /www/wordpress/blog

2. 手动上传文件

如果不想设置回源,或者使用了自定义目录不方便设置回源,也可以直接把缺失的文件上传到 OSS 上对应的目录即可

3. 设置 Exclude 目录

3.2.3 以后的版本在高级选项里面加入了 Exclude 选项,你可以编写对应的正则表达式来排出老文件,让对老文件的请求依旧落到服务器上。