七牛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功能添加例外选项,这只对选择使用了该插件的用户有效;做法如下图:

cnd-exception 在“如果是之前有则排除”选项中添加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评论错误的问题了。