数字营销 · Web开发 · 基础设施

Super Static Cache:WordPress高级纯静态缓存插件

Super Static Cache 是一款早期开发的 WordPress 高级静态缓存插件,支持 Direct、PHP 和 Rewrite 三种缓存模式,可通过直接返回静态文件降低 PHP 和数据库压力。项目现已停止维护,本文作为历史项目资料保留。

项目状态说明

作者已经开发出适合SEO网站使用的类Wordpress内容管理系统Domai CMS,已经不再使用Wordpress,本网站也已经由Wordpress迁移到了Domai CMS

Super Static Cache 已停止维护。本文保留原有的插件介绍、功能说明和历史更新记录,作为项目归档。

Super Static Cache 是一款 WordPress 缓存插件,旨在为 WordPress 网站提供配置简单、缓存效率高、适用性较强的静态缓存解决方案。

当时国内 WordPress 用户较为熟悉的缓存插件主要有 Wp Super Cache 和 cos-html-cache,它们各自都有不同的特点。

Wp Super Cache 是较为知名的 WordPress 缓存插件之一,功能比较丰富,可以根据需要进行多种配置,并支持缓存过期等功能,在很多网站中都比较实用。

不过,对于内容量较大的网站,如果缓存策略设置不合理,也可能增加服务器的磁盘和管理压力。Super Static Cache 则更偏向于直接生成静态缓存文件,在适合的场景下可以减少 PHP 和数据库的处理。

cos-html-cache 是一款 WordPress 纯静态化插件,可以自动生成静态 HTML 文件。用户再次访问时,可以直接由 Web 服务器返回缓存内容,而不再经过 PHP 处理。

不过,它对固定链接格式要求较高,通常需要使用带 .html 后缀的固定链接,并且缓存文件与程序文件的管理方式相对不够灵活。

Super Static Cache 结合了这两类插件的一些特点,安装和配置相对简单,支持 Direct、PHP 和 Rewrite 三种缓存模式,并可以根据需要设置不缓存的页面。

Super Static Cache 最新版界面
Super Static Cache 最新版界面

安装方法

将 super-static-cache 上传到 WordPress 插件目录:

wp-content/plugins/

然后进入 WordPress 后台的插件管理页面,激活 Super Static Cache。

激活之后,进入:

设置 → Super Static Cache

启用插件并选择运行方式。

插件默认处于关闭状态,完成配置后,根据所选择的缓存模式更新相应的固定链接或 Rewrite 规则。

下载地址

由于插件已经停止维护,以下地址主要作为历史项目参考。

  1. WordPress插件目录
  2. 在 WordPress 后台插件安装页面搜索 Super Static Cache
  3. GitHub项目地址

FAQ

1. 缓存后的加载速度快吗?

在 Direct 和 Rewrite 模式下,当缓存文件已经生成后,后续访问可以直接由 Web 服务器返回缓存内容,无需完整执行 WordPress 和数据库查询。

因此可以减少服务器的 PHP 和数据库压力。

不过,实际访问速度仍然与服务器性能、磁盘性能、网络环境以及 CDN 等因素有关。

2. Direct模式和Rewrite模式有什么区别?

Direct模式

Direct 模式会根据固定链接的形式,直接在 WordPress 安装目录中生成缓存文件。

优点是访问过程比较直接,但当网站页面数量较多时,缓存文件可能会与 WordPress 程序目录混在一起,不便于管理。

Rewrite模式

Rewrite 模式会专门建立:

super-static-cache

目录保存缓存文件。

访问请求通过 Web 服务器的 Rewrite 规则判断是否存在对应缓存,如果存在则直接返回缓存内容。

种方式通常更方便管理,但需要正确配置 Apache 或 Nginx 的 Rewrite 规则。

Super Static Cache适合哪些网站?

Super Static Cache 最初是为了满足个人项目需求开发的,因此和其他缓存插件一样,也有自己的适用场景。

如果网站:

  • 内容数量较多
  • 访问量较大
  • 数据库压力较高
  • 磁盘空间相对充足
  • 内容更新频率不是特别高

那么可以考虑使用静态缓存。

如果网站内容较少、访问量较低,并且页面更新非常频繁,则未必需要使用这种较重的静态缓存方式。

如何清除缓存文件?

最新版的高级设置中,可以根据缓存类型清理缓存。

如果需要清理全部缓存,可以选择:

ALL

然后点击清理按钮。

需要注意的是,缓存清理可能受到服务器权限、文件所有者以及运行环境等因素影响。

如果发现部分缓存无法自动清理,可以检查相关目录权限。

PHP模式有什么特点?

PHP 模式是在 3.0 版本中新增的缓存模式。

与 Direct 和 Rewrite 模式相比,PHP 模式仍然需要 WordPress 和 PHP 参与处理,因此无法做到完全绕过 PHP。

它的特点是:

  • 减少部分重复的数据查询
  • 对部分 WordPress 插件兼容性更好
  • 配置相对灵活

但相应地,它的资源消耗通常也高于直接返回静态文件的模式。

严格缓存模式和非严格缓存模式是什么?

严格模式和非严格模式仅针对 Direct 模式。

主要用于处理不同 URL 形式对应缓存文件的问题。

例如:

www.example.com/archives/1

严格模式下,这类 URL 可能不会直接匹配对应缓存。

非严格模式下,可以生成对应缓存,但服务器可能会进一步重定向到:

www.example.com/archives/1/

也就是带有结尾 / 的标准 URL。

如果使用 PHP 模式或 Rewrite 模式,可以忽略此项设置。

为什么缓存成功之后,搜索功能不能使用?

部分 WordPress 主题的搜索表单目标地址为:

/

而首页缓存生成之后,如果服务器配置中:

index.html

的优先级高于:

index.php

搜索请求可能会直接返回首页缓存,从而导致搜索功能无法正常执行。

解决方法包括:

方法一: 将搜索表单的目标地址修改为:

/index.php

或者 WordPress 对应安装目录中的 index.php。

方法二: 关闭首页缓存。

方法三: 使用 Rewrite 缓存模式。

Super Static Cache Spider是什么?

当网站内容更新时,Super Static Cache 可以自动建立或更新对应缓存。Super Static Cache Spider 是用于自动访问相关页面并建立缓存的爬行程序。如果 PHP 开启了 curl 扩展,可以在日志中看到相关访问记录。这些访问请求通常来自网站服务器自身,或者经过 CDN 等网络服务。Spider 主要在内容发生更新时运行,并不会持续不断地爬取整个网站。

为什么访问会出现403错误,或者返回目录index?

这种情况主要可能出现在 Direct 模式下。例如固定链接使用了多级目录:

/%year%/%monthnum%/%day%/%postname%/

文章 URL 可能类似:

www.example.com/2015/03/02/hello-world/

缓存生成之后,如果用户访问:

www.example.com/2015/03/02/

或者:

www.example.com/2015/03/

这些目录可能没有对应的首页文件。如果服务器关闭了目录浏览功能,可能返回 403;如果开启了目录浏览,则可能显示目录中的文件。对于使用较深层级固定链接的网站,建议使用 Rewrite 模式,可以避免部分目录访问问题。

Rewrite规则如何添加?

使用 Rewrite 模式时,需要在 Web 服务器中添加相应的 Rewrite 规则。在插件设置中选择 Rewrite 模式后,点击升级,系统会自动生成对应规则。当时插件主要支持:

  • Apache
  • Nginx

对于 Apache,可以将生成的规则添加到:

.htaccess

或者 Apache 配置文件中。

对于 Nginx,则需要将规则添加到网站对应的:

server

配置中。

通常需要将 Super Static Cache 的规则放在其他 WordPress Rewrite 规则之前。

配置完成后,再次点击升级。如果插件不再提示 Rewrite 规则错误,通常说明规则已经添加成功。

为什么Nginx提示location duplicate?

Nginx 中,同一个匹配路径不能重复定义多个相同的 location。

如果服务器原来的 Rewrite 配置与 Super Static Cache 生成的规则存在相同 location,直接复制进去可能会出现:

location duplicate

这种情况下,需要手动合并两个 location 的逻辑,而不是重复添加。

通常应保证缓存相关的判断规则优先执行。

为什么后台发布文章可以更新缓存,采集工具却不能?

Super Static Cache 建立缓存时,会依赖 WordPress 的相关操作。

在后台正常发布或修改文章时,WordPress 会触发对应的动作,插件可以监听这些操作并更新缓存。

但如果采集工具直接向数据库插入数据,绕过了 WordPress 的正常发布流程,插件就无法知道网站内容已经发生变化。

这种情况下,可以考虑:

  • 关闭首页缓存
  • 使用定时任务更新缓存
  • 通过 WordPress 的正常接口发布内容

如何指定单个页面不缓存?

在 3.3.1 版本中,增加了指定单个页面不缓存的功能。

直接在设置中填写不需要缓存的页面地址即可:

一行一个URL

网站内容很多,是否支持缓存压缩?

在内容量较大的网站中,大量静态缓存文件可能占用较多磁盘空间。因此,从 3.3.4 版本开始,Super Static Cache 增加了缓存压缩功能。目前主要支持 Apache 和 Nginx。

Nginx 需要支持:

ngx_http_gzip_static_modulengx_http_gunzip_module

Apache 则需要安装:

mod_headers

缓存模式需要使用:

Rewrite模式

或者:

PHP模式

缓存压缩能够节省多少空间?

插件使用 gzip 对缓存文件进行压缩。实际压缩比例取决于页面内容,例如 HTML、CSS 和 JavaScript 等文本内容通常具有较好的压缩效果。对于内容较多的网站,通常可以明显减少缓存文件占用的磁盘空间。原项目测试中,部分网站可以节省 50%以上 的缓存存储空间。

更新日志

1.x

  • 修复安装和卸载时报 Notice 的问题,感谢 @camson 的反馈。
  • 修复部分主题在用户登录和未登录状态下页面内容不同,导致缓存异常的问题。

2.0.0

主要更新:

  • 支持 Rewrite 模式。
  • Rewrite 模式下会在 WordPress 安装目录创建 super-static-cache 缓存目录。
  • 支持英文管理后台。
  • 修复多个 Bug。
  • 文章发布后自动建立缓存。
  • 文章修改后自动更新缓存。
  • 文章删除后自动删除对应缓存。

2.0.1

优化 Nginx 下 Rewrite 模式的规则。

2.0.2

增加 URL 中包含多字节字符时的缓存支持。

由于 Windows 服务器不同语言环境可能存在字符编码差异,当时暂未提供 Windows 服务器下的多字节缓存支持。

3.0

2015年1月26日更新

主要更新:

  • 增加 PHP 缓存模式。
  • 增加 Tag、Category 页面自动更新。
  • 增加严格与非严格缓存模式。
  • 优化缓存删除功能。
  • 修复已知 Bug。

3.2

2015年8月14日更新

主要更新:

  • 修复之前版本中的部分 Bug。
  • 更新后台管理界面。
  • 支持用户设置缓存自动建立和重建时机。
  • 优化缓存清理功能,可根据需要清理指定类型的缓存。

3.3.1

2016年4月19日更新

  • 增加指定单个页面不缓存的功能。

3.3.4

2017年5月17日更新

  • 增加缓存压缩功能。
  • 对于内容较多的网站,可以明显减少缓存文件占用的磁盘空间。

评论248

欢迎分享你的看法,也欢迎补充不同的实践经验。

石头
牛逼
Q
qiuyuec
大佬写的插件就是nb,过了这么多年还能用
G
Geticer
如何只对未登录的用户展示缓存的静态页面? 或者,如何不对已登录的用户展示缓存的静态页面?
H
Hito
感谢关注,本人已经开发一个类WP的CMS,Super Static Cache不在维护。
K
kiopc Hito
为什么搜索不博主开发cms系统啊?是不是更名了?
T
test
卸载之后再安装,后台就一直提示没有更新伪静态规则。 因为第一次安装之后发现不能登录,就卸载了。 然后再外面找到别人写的可以登录的规则: if ($args !~ ".*=.*"){ set $ssc "${ssc}Y"; } if ($http_cookie !~ "wordpress_logged_in.*"){ set $ssc "${ssc}Y"; } 放到伪静态之后,然后再安装插件。 就一直提示没有更新规则,各种重启都没用。 删掉另外加的规则,也还是提示没有更新。
河枯
我这边一直提示 缓存功能没有开启 我都重新装了 wp super cache 但是还是提醒 没有开启缓存 而且每次我打开 super-static-cache 的配置页面都会卡上10分钟左右 前台页面 全部卡死 之后才恢复 Nginx的伪静态我也配置了
M
max
设置按钮点后为什么无法使用,一直转
L
Learningman
请问能不能兼容一下Auto optimize,缓存时也聚合Auto Optimize生成的cache js css
K
kiss
使用贵插件速度非常的牛逼。但仍有二点疑问。希望博主解惑,感谢! 一,使用Rewrite模式 (推荐),评论在提交的时候非常慢,可能是要重建页面,这个时间有点久。 二,用户登陆以后,点击一个页面就变成未登陆状态了。因为这是一个完全静态的页面。请教下如何综合处理下这两个问题呢?感谢!
H
Hito
感谢使用,插件会在设置的情况下,在评论通过时更新缓存,视服务器配置和网络速度,有时会出现等待时间较长。第二个问题如果想让登陆用户不读取缓存,可通过伪静态记录实现,具体请看以前的留言。
阿里云百科网
您好,使用这个插件是不是文章页的评论就是失效了?有没有办法能够解决呢
H
Hito
在后台设置可以开启评论通过之后自动刷新缓存
Z
zlsin
博主,有个问题不知道算不算bug,就是访问像https://www.hitoy.org/super-static-cache-for-wordperss.html?dir=wp-content(以本站为例)这种连接会直接回源访问服务器,访问首页https://www.hitoy.org/?dir=wp-content首页底部页码连接就会被改变为https://www.hitoy.org/page/2?dir=wp-content有时会被插件缓存为首页,底部页码连接就一直显示为https://www.hitoy.org/page/2(可以是任意存在页码)?dir=wp-content,导致访客点击也无法访问下一页了
H
Hito
感谢使用和回复,关于第一个问题,是因为考虑到某些情况下用户需要回源访问,例如搜索,所以设置带查询的都直接回源了,如不需要可以在伪静态规则中去掉相应规则即可。 关于第二个问题,我最近也注意到了,我会抽时间完善改进的,谢谢!
V
Voidark
大佬,Nginx gzip gunzip模块都有,伪静态规则我也添加了。 但貌似插件检测出了问题,勾选开启压缩的话,总是提示我没有更新伪静态规则,其实已经更新了。 现在我选择关闭,但gzip_static always;gunzip on;依然放进规则里,这样不会提示我更新伪静态规则。测试过,缓存都是gz文件,所以没什么问题。
X
xuanlingluo
我的网站电脑和手机端是不同的布局,缓存之后手机端访问也变成PC端布局了。请问有没有解决办法,或者让手机端不读缓存文件
H
Hito
之前的回复里有,让手机的user-agent不读缓存
奇侠一枝梅
开启二级域名后,网站首页的缓存被替换成子域名首页内容。
史密斯
这款插件非常的牛,简单高效不需要那么多选项,直接缓存,比WP-SUPER CACHE 好很多
B
brian
作者你好! 有个问题,为什么windows iis 的伪静态规则怎么增减
H
Hito
暂不支持IIS伪静态规则,你可以对照.htaccess的规则对IIS进行设置
L
L
博主,有个问题就是当一篇文章发表以后没有建立缓存(或是删除缓存后),插件会默认缓存第一次点击的页面。但是问题来了,如果访问的当前到访者(就是以前在网站留过评论)cookie中保存有自己的昵称、邮箱和网站信息浏览器会自动填上,这时插件也会将该信息一起保存到静态文件里面value字端里,每次打开都会看到其他人暴露的邮箱等信息。 除了用JavaScript处理cookie覆盖掉以外,还有什么办法吗?
H
Hito
插件对用户登陆情况下是不缓存的,但有些主题或者插件会根据用户的情况用PHP处理相关页面输出,如果站长确实有这方面的需求,那么这种情况是不适用使用缓存的,如果不是确实有这方面的需求,建议把自动记忆用户名,邮箱等功能放到前台实现。
小林
跟W3 Total Cache冲突,Direct模式不会生成静态文件,停用W3 Total Cache后才能生成。 我希望跟W3 Total Cache共用,W3 Total Cache缓存分类页和首页,用Super Static Cache缓存单页。 请博主老大协助啊!
H
Hito
没用过W3 Total Cache, 虽然感觉这个需求很奇怪,但是应该可以实现,你可以找一下W3的作者
Z
ZI
博主你的https证书在安卓版谷歌浏览器53.0下被拦截提示不是安全链接,怎么回事?还有就是Wordpress后台推送的更新Super Static Cache 3.3.5版本具体更新了什么,麻烦在这更新说明一下,谢谢。
H
Hito
关于证书的问题,请刷新并检查一下,并确认一下是否有中间人攻击。第二个问题,3.3.5主要更新是测试是否兼容wp4.8和bug修复
云落
使用archives/123.html 天然适合这种纯净态插件,或者说原来就是为了使用cos插件的
云落
之前用的cos,试试这个插件