七牛CDN导致AJAX评论错误解决方案
AJAX评论提交错误问题
网站备案后也去申请了七牛CDN的标准用户,并安装了水煮鱼的七牛CDN自动上传插件,一切看起来完美,静态文件全部通过CDN加速,减轻服务器负担,但是今天被人提醒才发现评论无法AJAX提交了,总是提示“{"error":"get from image source failed: E405"}”,网上搜索了一下,发现不少人也有此类问题,主要原因是CDN缓存了commonts-ajax.js文件,而ajax评论默认只加载主题根目录的那个js文件,路径错了,当然提交不了。
网上流传的解决方案
总结一下网上流传的解决方案的几个版本,发现并非所有人都适用,现在先说明一下。
第一种方法:修改commonts-ajax.js使之支持CDN路径,具体方案如下:
找到如下代码:
var i = 0, got = -1, len = document.getElementsByTagName('script').length; while ( i <= len && got == -1){ var js_url = document.getElementsByTagName('script')[i].src, got = js_url.indexOf('comments-ajax.js'); i++ ; }[/php]插入内容:
[php]js_url = js_url.replace('zhiyanblog.qiniudn.com','www.zhiyanblog.com');
插入成功后应当是这样:
var i = 0, got = -1, len = document.getElementsByTagName('script').length; while ( i <= len && got == -1){ var js_url = document.getElementsByTagName('script')[i].src, got = js_url.indexOf('comments-ajax.js'); i++ ; } js_url = js_url.replace('zhiyanblog.qiniudn.com','www.zhiyanblog.com');[/php]保存并上传该文件至CDN服务器。
问题,我发现我的comments-ajax.js文件是压缩过了,无法找到明显的此类标识符,修改太困难了,所以PASS。
第二种方法:使用WP-Super-Cache插件的CDN功能添加例外选项,这只对选择使用了该插件的用户有效;做法如下图:
在“如果是之前有则排除”选项中添加comments-ajax记录以排除对该js的CDN加速。
事实上,我用的并非该插件,而且该插件不能自动同步文件至CDN服务器,不如我现在用的七牛CDN插件强大,所以接下来讲我的方法。
七牛CDN插件修改解决方案
我使用了wpjam-qiniu这个CDN同步插件,觉得非常不错,目前唯一的缺陷就是ajax评论错误,现在好了,你只需要稍微修改插件代码即可。
打开插件目录,找到wpjam-qiniutek.php文件打开,定位至100行return $html前,插入以下代码:
[php]$html = str_replace('http://zhiyanblog.qiniudn.com/wp-content/themes/tinection/comments-ajax.js', 'http://webapproach.net/wp-content/themes/tinection/comments-ajax.js', $html);
其原理是插件已经修改静态文件原目录至CDN目录,我只需要再把comments-ajax.js这一个文件的目录改回来即可,其中第一个路径是CDN服务器上comment-ajax.js的路径,需要把它替换为第二个路径,即网站原文件路径,具体路径请根据你自己的网站作修改,这样既体验了七牛CDN,又不用愁AJAX评论错误的问题了。