新浪微博图床这几年说实话还是够良心的,让许多大小站长都白嫖了好长时间,图片CDN,全世界都是秒开,速度很理想。小白建站从2014年开始就在使用它了。现在好几个博客和一个论坛全是放在上面的。不过,做网站的基本上都知道了。微博图床在2019年4月24日突然就启用了防盗链机制。网站界一片哀鸿。图片全挂了。这真是一个悲惨的故事。
不过,技术大牛很快就提出了解决方法。
解决微博图床防盗链无非有下面几种:
1、在<head></head>标签里添加:
<meta name="referrer" content="no-referrer" />
这段代码小白之前一直在用,因为简单易上手,直接在wordpress的主题文件找到header.php,在<head></head>中间加入上述代码,全站的图片立马恢复本来面目。但是,缺点很明显:从你网站引导到其他网站的流量不显示来路,对于挂广告的站点来说,风险极大,容易被联盟封号。而且不利于分析网站的营销能力。所以,我果断放弃了。
2.有人说用nginx的反代。但我不懂这些高深的技术,也没有面向新手的教程。直接放弃。
3、修改微博图床生成的图片的服务器地址。比如,新浪几个常用的:wx1.sinaimg.cn,wx2.sinaimg.com,ws2.sinaimg.cn等,直接修改为:tva1.sinaimg.cn。这个方法现在是10月份了,还可以正常使用。但不知道能挺多久。
4、这是小白我自己摸索出来的一段代码。其实是第1种方法的变种。将”no-referrer”标签直接添加到文章中微博图片的img标签里。具体代码如下:
/** Auto-Generate referrerpolicy="no-referrer" to images **/ /** 解决新浪微博图床防盗链**/ /** by www.zixuekong.com**/ function image_referrerpolicy_tag($content){ global $post;preg_match_all('/<img(.*?)sinaimg(.*?)\/>/', $content, $images); if(!is_null($images)) {foreach($images[1] as $index => $value) { $new_img = str_replace('<img', '<img referrerpolicy="no-referrer"', $images[0][$index]); $content = str_replace($images[0][$index], $new_img, $content);}} return $content; } add_filter('the_content', 'image_referrerpolicy_tag', 99999);
这段代码的作用是:正则查找文章中有出现*.sinaimg.cn的图片,将【img】替换成【img referrerpolicy=”no-referrer”】。而如果不是微博图床的图片,则不需要替换。这样就堪称完美了。
文章前台查看源代码,会出现如下:
这样做还是有一定的缺陷:那就是部分老旧的浏览器,不支持这个referrerpolicy标签。不过受影响应该不是不大。算是我认为目前最完美的方法了。至于为什么不换其他图床,一方面是要钱,一方面是微博图床的打开速度确实给力!
最后还是要提醒大家:如果不差钱,还是自建图片存储空间比较好。如果你网站流量够大,这笔费用还是不小的。因为,说不准微博图床会彻底开启防盗链,这些小方法到时根本没卵用。