WP Super Cache静态缓存插件纯代码版(兼容多域名网站)

中午,小熊发来一篇来自歧路亡羊博客的精彩教程:《wordpress利用代码来实现缓存》。粗略看了一下,发现这个代码在几个月之前我就用过,不过由于此代码无法区分多个域名,从而会导致移动站无法跳转的情况。

我利用午休的时间,仔细看了下这篇文章,发现博主在原代码的基础上,还加上了自动刷新缓存的机制,不过貌似是和WP Super Cache插件一样,只要更新文章,就会清除所有缓存,感觉不太适合我。

不过,这篇文章还是激发了我兴趣。折腾了几个月,我现在也能基本看得懂PHP了,所以决定把这个代码修改一下,让它可以适应多个域名的情况。

一、何为多域名?

正式分享之前,我必须说清楚一下,什么是多域名网站!

熟悉的朋友,应该知道张戈博客除了zhangge.net之外,还有一个m.zhangge.net的移动域名。当js检测到是移动端的UA时,将会自动跳转到m.zhangge.net,从而实现移动端的适配跳转。

以前分享这个跳转的时候,我下意识的以为,这种跳转可以兼容任意缓存,比如cos-html-cache等。实际上发现,这种跳转只能兼容wp super cache!原因是:只有wp super cache 是分域名来储存缓存文件的,其他插件包括代码版都不区分域名,统统存到同一个路径,于是就出现了无限死循环跳转的窘迫,因为缓存文件是同一个,跳了之后还是PC的缓存,怎么跳都跳不出这个死循环!!(估计又有人看不懂了,不过无所谓,真正需要的时候肯定看得懂!)

言归正传,既然wp super cache可以兼容多域名网站,那代码版肯定也可以做到!测试了十来分钟,就搞定了!存放结构都和wp-super-cache一样!

下面分享一下详细步骤:

二、部署代码

以下是三种缓存机制中,缓存文件存放路径的对比:

部署方法还是和原代码一致:

将以上代码保存为cache.php上传到网站根目录,然后修改网站根目录的index.php,在第一个<?php 后添加代码:

现在,只要刷新一下网站前台,就能在cache里面看到内容了,而且结构和WP Super Cache一致:

WP Super Cache静态缓存插件纯代码版(兼容多域名网站)WP Super Cache静态缓存插件纯代码版(兼容多域名网站)WP Super Cache静态缓存插件纯代码版(兼容多域名网站)

很明显,我参考了WP Super Cache的存放路径,请求域名的不同,存放位置也会不同,从而避免了多个域名请求到同一个缓存文件,造成跳转死循环的问题!(不得不说WP Super Cache想得很周到!)

当然,如果你想改成和WP Super Cache一样的存放路径,只需要将第二行代码如下修改即可:

代码中已加入缓存黑名单功能,如果想禁止某页面缓存,只要将该页面的关键字眼加入到如下代码,比如我要禁止缓存留言板,也就是http://zhangge.net/liuyan,那么如下新增:

最新补充:今早查看缓存时,大小居然高达45M!进去看了下,只能惊叹那些无聊的小人,真特么多!发一个部分截图,你们感受下:

WP Super Cache静态缓存插件纯代码版(兼容多域名网站)

各种恶意访问,真是居心叵测!如果非常多,建议将关键词加入到缓存黑名单,避免缓存太多占空间。

三、更多补刀

①、找回CDN功能

用过WP Super Cache的朋友,应该知道这个插件还自带CDN功能,很全面!那么换成代码版,当然也不能漏掉这个实用功能!

正好歧路亡羊博客分享了水煮鱼的七牛CDN插件的代码版,直接拿来主义,然后强迫症缩进一下:

根据实际情况修改以上代码的2~3行,最后粘贴到主题目录下的functions.php文件的最后一个?>之前即可。

如果和张戈博客一样,有一个PC主题,还有个移动主题,那么2个主题的functions.php都需要添加,但是要注意修改不同的域名:

比如pc主题 用http://zhangge.net,而移动主题用http://m.zhangge.net,总之依葫芦画瓢就行!!!

这样就实现了之前WP Super Cache的CDN功能。

②、找回Mod_rewrite模式

如果想要在nginx下实现mod_rewrite模式,需要在nginx下新增一些规则,这个在张戈博客已经分享过(相关文章

开启这个模式的好处是,当存在静态缓存文件时,nginx将直接调用缓存文件给浏览器,而不再需要经过php-fpm模块,从而加载速度成倍增长!

那本文分享的代码版能否实现这个功能呢?依然是那句话,有想法,技术都不是问题!

很简单,只要稍微修改一下之前分享的nginx下的mod_rewrite规则即可:

只要将以上代码中的开始到结束之间的代码,添加到nginx配置文件中location / 模块原有规则之前即可。

保存之后,执行如下类似命令重载nginx:

完成以上操作,当有人访问到你的网站的缓存文件时,无需经过index.php,直接由nginx 判断并回应给用户,和之前WP Super Cache的机制一摸一样!

③、提交评论时清除文章缓存

这是张戈博客之前的文章就分享过的方法(相关文章),这次只要稍微修改下路径就可以用了!

修改主题目录下的comment-ajax.php,将以上代码添加到以下代码之后即可实现提交评论时删除当前文章的缓存:

以上方法会比歧路亡羊博主分享的要实用一些,当然萝卜白菜各有所爱,喜欢哪个用哪个!值得注意的是,如果博客没有使用ajax评论,那么以上代码需要添加到WP根目录下的wp-comments-post.php文件的相应位置。

四、多后遗症

部署此功能之后,各种问题迎面而来,我也真是醉了!

①、若主题有登陆状态显示,那缓存之后,无论谁打开都显示已登录;

②、WordPress原生评论框已登录状态将带入缓存当中,效果同上;

③、管理员回复评论也会发送邮件给管理员(①、②项处理OK之后发现的问题);

④、无法保存评论者信息,这个是开启缓存之后的诟病,之前已分享过变相解决办法(相关文章)。

对于①、②,很显然缓存的时候将用户登陆状态一起缓存了,导致任何人打开都是已登录,你醉了么?

解决办法:

针对①、找到主题显示状态的位置,修改登陆相关代码!比如知更鸟主题主题下的time.php和login.php;

针对②、找到主题下的comments.php文件,删除状态判断代码,主体不同,可能会有所差异,粗略贴一下:

 看起来相当费解,我还是贴一下我最后修改的代码吧!仅供参考:

针对问题③,需要在发送邮件时先做一个判断,由于缓存无法取得用户登陆状态,所以我使用邮箱来判断是否发送:

如果评论者邮箱是博主自己的邮箱,则不发送邮件!由于每个主题的情况都不一样,所以这个方法只能参考,而无法通用!如果,你的博客用了代码版的SMTP功能,那么就可以使用这个方法!

更多相关问题请看续篇教程:

         ①、启用WP Super Cache纯代码版本之后的一些优化措施

         ②、php平滑重启nginx,彻底清除WordPress的静态缓存

五、写到最后

这篇文章是在我一边测试、一边记录的情况下完成的!本以为会很简单,结果状况百出,问题接踵而来!结果,此教程也变得异常复杂难懂!!!(写得比较匆忙,后续将持续更新发现的问题)

所以,在本文最后,张戈温馨提醒一下:

如果你博客用了多说,如果你博客没有什么已登录状态的判断代码,那么这个方法会比较简单!

如果你比较会折腾代码,也看懂了本文,那么这个方法依然适合你!

如果你不懂代码,而且还不容易接受新事物,那么请不要轻易去尝试本文分享的方法,否则也真是醉了。。。

早知道这么麻烦,我还是继续用WP Super Cache插件比较靠谱!想跃跃欲试的博友,最好先考虑清楚咯。。。。

发表评论

gravatar

:?::razz::sad::evil::!::smile::oops::grin::eek::shock::???::cool::lol::mad::twisted::roll::wink::idea::arrow::neutral::cry::mrgreen:

刷新评论

目前评论:39   其中:访客  27   博主  11   引用   1

来自外部的引用: 1

  • wordpress纯代码无需插件实现WP Super Cache静态缓存功能(兼容多域名网站) | 逍遥乐IT博客
  1. 七弦琴 3 来自天朝的朋友 谷歌浏览器 Windows 7 河南省鹤壁市 联通

    我的七牛云就是用的代码实现的,水煮鱼的插件虽然很实用,但是真心无用功能太多。。一般博客用不到。。

    • 最新hosts 5 来自天朝的朋友 搜狗浏览器 Windows 7 湖北省武汉市 电信

      现在只用七牛做图床。。

  2. 必分享 2 来自天朝的朋友 谷歌浏览器 Windows 7 广东省佛山市 电信

    我用的是一个插件。

  3. 顶固衣柜 2 来自天朝的朋友 Internet Explorer Windows 7 四川省绵阳市 联通

    喔喔,感觉亲自做这个测试一样

  4. 陌小雨 5 来自天朝的朋友 火狐浏览器 Windows 8.1 广东省珠海市 电信

    太厉害了,博主!向博主靠近!

  5. 极品飞鸽 5 来自天朝的朋友 谷歌浏览器 Windows 7 四川省成都市 电信

    俺博客就用了个自适应的主题,专门搞个移动端网站麻烦

  6. 梦想网络 5 来自天朝的朋友 谷歌浏览器 Windows 10 四川省成都市 电信

    我又来了博主,可否帮我看看我的主题怎么了。。。不知道修改了哪里,首页进入时间好长,文章页面就没问题,我换其他主题就很快,响应时间两千多毫秒,我不太喜欢缓存。

    • 梦想网络 5 来自天朝的朋友 谷歌浏览器 Windows 10 四川省成都市 电信

      解决了。。。原来是在首页调用了查询百度是否收录文章了。。。首页文章太多了,而且有好几篇是没有收录的。。查询的太多。。现在只在文章页调用

      • 张戈 [博主] 来自天朝的朋友 谷歌浏览器 Windows 7 广东省深圳市 电信

        做个缓存就OK了

  7. 梦想网络 5 来自天朝的朋友 谷歌浏览器 Windows 10 四川省成都市 电信

    怎么刚刚的留言没显示。。缓存的原因么。。

  8. 励志视频 1 来自天朝的朋友 火狐浏览器 Windows XP 广东省深圳市 联通

    我的还是楼主帮我弄的呢。呵呵。

  9. 藏云阁高清网 0 来自天朝的朋友 谷歌浏览器 Windows 7 天津市 联通

    七牛配合WP Super Cache效果还是很不错的

  10. 丁旭东博客 2 来自天朝的朋友 火狐浏览器5.0 Windows 7 福建省厦门市 联通

    看着博客成长 起来的,赞一个

  11. 幻杀博客 5 来自天朝的朋友 谷歌浏览器 Windows 8.1 山东省潍坊市 联通

    上边第一个cache.php 好像用不了哦

    • 张戈 [博主] 来自天朝的朋友 谷歌浏览器 Windows 7 广东省深圳市 电信

      一直正常使用中。

      • 幻杀博客 5 来自天朝的朋友 谷歌浏览器 Windows 8.1 山东省潍坊市 联通

        我使用的时候第21行出错,应该是分享的时候弄错了吧

        • 张戈 [博主] 来自天朝的朋友 谷歌浏览器 Windows 7 广东省深圳市宝安区 电信

          出错了,检查下就好了。
          我看了下文章,是多了一个空格代码&.nbsp;删除应该就可以了,应该是更新文章的时候转码了。

  12. 小舞 2 来自天朝的朋友 谷歌浏览器 Windows 7 河南省南阳市桐柏县 联通

    偶然的一次用手机打开博主的博客,发现博主的移动端是知更鸟的那个简约主题,但是域名确实二级域名,本以为是百度的siteapp移动端,原来不是的,这个手机站用二级域名是怎么做的

  13. 让故事继续 3 来自天朝的朋友 谷歌浏览器 Windows 7 河北省石家庄市 电信

    非常喜欢楼主的这个文章 有个问题清楼主指教一下

    如果我不想按照域名来存放 文章的代码该怎么改?

    原来是按MD5 挺乱的 我想按照文章名的POSTID来存放 比如你的文章中的图中的 直接以这种方式存放

    ../cache/1000/1000.html
    ../cache/2000/2000.html
    ../cache/3000/3000.html
    ../cache/4000/4000.html

    该如何改动呢 ?

    • 张戈 [博主] 来自天朝的朋友 谷歌浏览器 Windows 7 广东省深圳市 电信

      第三行如下修改,可以去掉域名文件夹。

      ID来做文件夹,需要将如下行进行改造:

      $_SERVER[‘REQUEST_URI’]; 这个变量需要去掉后面的 .html,你自己折腾,不会的话就用 、cache/0000.html/index.html的形式也没啥问题,没必要纠结存放形式把?

      • 让故事继续 3 来自天朝的朋友 谷歌浏览器 Windows 7 河北省石家庄市 电信

        谢谢 懂啦

  14. 林木木 0 来自天朝的朋友 谷歌浏览器 Mac OS X 10_10_4 浙江省宁波市江东区 电信

    已醉

    • 张戈 [博主] 来自天朝的朋友 谷歌浏览器 Windows 7 广东省深圳市 联通

      不送

  15. boke112导航 5 来自天朝的朋友 火狐浏览器 Windows XP 广东省佛山市 电信

    :sad: :!: :grin: :wink: :cry: :neutral: 啊啊啊啊啊啊啊啊啊

    • 张戈 [博主] 来自天朝的朋友 QQ浏览器 Windows 7 广东省广州市 电信

      :???: 这是什么情况,被人盗用回复?

      • boke112导航 5 来自天朝的朋友 谷歌浏览器 Windows XP 广西南宁市 电信

        :twisted: 谁那么无聊,竟然盗用我的用户名和邮箱来回复,无语。PS:有什么办法解决吗?

        • 张戈 [博主] 来自天朝的朋友 QQ浏览器 Windows 7 广东省广州市 电信

          前2天还有人盗用我的在我博客回复呢。。。都不用审核,打各种广告。
          已经采取了排除措施,回头整理下。
          不过用你的信息在我博客留言,这个就没办法阻止了。

          • boke112导航 5 来自天朝的朋友 谷歌浏览器 Windows XP 广西南宁市 电信

            上次也有人用我的信息在知更鸟那边发垃圾评论,头疼啊

  16. Sven 2 Germany 谷歌浏览器 Mac OS X 10_10_5 德国 斯图加特大学

    张戈的文章就是帅气,用上了,效果不错,有个小地方要改下:
    生成的缓存权限是777,把代码里面的0777改成0755会好点。

    • 张戈 [博主] 来自天朝的朋友 QQ浏览器 Windows 7 广东省广州市 电信

      嗯,是这个理。

  17. 明月登楼 5 来自天朝的朋友 谷歌浏览器 Windows 10 河南省南阳市 联通

    看着都好复杂呀!呵呵!

  18. 魅离儿博客 1 来自天朝的朋友 谷歌浏览器 Windows 8.1 辽宁省大连市 联通

    求问博主,这段代码缓存是怎么写入的,$content的值也就是网页的内容哪里来的呢。感谢 :smile:

    • 魅离儿博客 1 来自天朝的朋友 谷歌浏览器 Windows 8.1 辽宁省大连市 大连理工大学

      http://www.php.net/manual/zh/function.ob-start.php 自问自答了。没搞过php,所以略有不懂。还是官方教程清楚

      • 张戈 [博主] 来自天朝的朋友 QQ浏览器 Mac OS X 10_11_3 广东省深圳市 电信

        实在是抱歉,天天忙成狗,没时间搭理博客评论。。。自己找到了印象更深刻,感谢分享成果。

  19. 丁春华 1 来自天朝的朋友 谷歌浏览器 Windows 10 四川省达州市 电信

    技术控啊,服了。

  20. 林侦通博客 0 来自天朝的朋友 QQ浏览器 Windows 10 广西南宁市 电信

    如果使用了cdn再使用这个插件做缓存,这样的效果是不是会更好一点。

    • 张戈 [博主] 来自天朝的朋友 QQ浏览器 Windows 7 广东省广州市 电信

      本地也是缓存的话,1是对SEO更好,因为蜘蛛回源抓取快,2是外部访问更快。

加载中,请稍候...