新浪图床早就防盗链了,那么网站图片外链如何保存本地呢?网上很多办法有点饮鸩止渴的意思,我们还是得另辟蹊径。
我们还是以尽量简单的方法来搞定这个问题。首先我们要把网站中所有放在新浪图床上的图片都找出来,然后下载到我们的网站服务器上。
我们先来看看新浪图床图片URL的特点:
http://ws1.sinaimg.cn/large/006tKfTcgy1g12lp87my3j30ow0780sz.jpg
https://ws2.sinaimg.cn/large/0072Lfvtly1fymh07hzkkj30dq0dqagc.png
https://ws3.sinaimg.cn/large/006tNc79gy1g2cj78h6x5j31gf0itwhj.gif
https://ws4.sinaimg.cn/large/0072Lfvtly1fzmelgwrkkj30el09taag.jpg
我们需要一个正则表达式把上面的链接都匹配出来
最前面的协议有两种情况http和https,所以我们用https?来匹配(问号表示前面的‘s’要么出现0次,要么出现1次)
后面的ws开头的主机好像有4台,然后我就算他10台,所以对应的正则为 ws[0-9]
/large/491ea66cgy1g26kbwkrgpj22001hs7wh这一段杂七杂八的用[a-Z0-9/]+?来匹配,‘[a-Z0-9/]’这里表示不管你是字母还是数字,还是/都给你匹配上,后面的+表示前面的数字、字母会出现一次或者多次,最后的问号是用来防止过渡匹配的,在这不加问号也没问题。
最后面的图片格式用.(jpg|png|gif)来匹配。
最终的正则表达式为:
https?://ws[0-9].sinaimg.cn[a-Z0-9/]+?.(jpg|png|gif)
当然,如果你的网站数据库非常大的话,你需要把这条正则写的尽量的精确,免得半天都跑不出来结果,比方说你全站https就可以这样写:
https://ws[1-4].sinaimg.cn/large/[a-Z0-9/]+?.(jpg|png|gif)
正则有了,我们在网站根目录新建一个large目录,把你网站数据库备份文件190425.sql也放到这里,然后把图片全下载到这里,在large目录里面执行:
cd /www/wwwroot/large
执行命令查看图片:
grep -Eo 'https?://ws[0-9].sinaimg.cn[a-Z0-9/]+?.(jpg|png|gif)' 190425.sql
进入large目录后在执行命令下载图片:
for i in `grep -Eo 'https?://ww[0-9].sinaimg.cn[a-Z0-9/]+?.(jpg|png|gif)' 190425.sql`;do wget $i;done
此时,你已经把所有新浪图床上的图片都下载到服务器上,你只要修改下链接就行了。
现在要动数据库了,一定得先备份数据库,一定得先备份数据库,一定得先备份数据库,然后动手。
登录进MySQL,use切换到你网站数据库,然后执行下面命令:
UPDATE wp_posts SET post_content = REPLACE( post_content, 'ws1.sinaimg.cn', '8gws.com');
UPDATE wp_posts SET post_content = REPLACE( post_content, 'ws2.sinaimg.cn', '8gws.com');
UPDATE wp_posts SET post_content = REPLACE( post_content, 'ws3.sinaimg.cn', '8gws.com');
UPDATE wp_posts SET post_content = REPLACE( post_content, 'ws4.sinaimg.cn', '8gws.com');
注意自行替换最后面的“8gws.com”,此时,大功告成,新浪图床图片本地化完成,记得一定要把large目录里面的数据库备份文件删除。