WordPress的轻量级的启用CDN插件CDN Enabler

WordPress站点启用CDN,其实就是切换图片、CSS等元素的URL到CDN域名,这要通过插件实现。官方扩展市场里很多相关插件,但都过于庞大,尤其多数都是集成在大型插件里面的小功能。 CDN Enabler 应该是最轻量级的件了,它本身也是一家CDN服务商的配套插件。插件本身的说明如下

The WordPress CDN Enabler plugin is a content delivery network (CDN) integration plugin that rewrites URLs, such as those serving CSS, JavaScript, and images, to be served by a CDN. It supports including URLs in the rewrite by file extension and excluding URLs in the rewrite by string. When a KeyCDN account is connected the CDN cache can be purged from WordPress. This simple, lightweight plugin makes integrating a WordPress website with a CDN a breeze.

不过,该插件有缺陷:

  1. 如果WordPress站点在域名下的子目录里,原版插件就不支持了,它只允许WordPress在根目录下。
  2. 误把以 “/” 开头的字符串当作静态文件路径而加 url 前缀。

所以,做了个针对的简单修改,改良了这两个缺陷;使用的是是 2.0.8 版本,截止(2024/11/05)本文写作时的最新版本。

应用补丁后插件代码:

CDN-Enabler_v2.0.8-patched_cdn-subdir

事实上,在查阅原版插件代码时,似乎其早期版本是支持子目录的。

另外,如果使用自定义CDN服务,那么该插件就不支持向CDN发送通知的功能(比强制让缓存失效等)。

缺陷2的表现及解决方案

(下面是针对缺陷2的修订手记,不关心细节的话没必要阅读)

使用原版插件时发现,类似于如下的路径,也会当成静态元素而替换成cdn路径

<p>配置文件 /etc/vnx/config.json ,</p>
<p>配置文件 /etc/vnx/config.json 天地元王</p>
<p>这个正常 /etc/vnx/config.json</p>

很明显,它们不能做替换!一个解决方法是,可以在设置选项中,通过限制文件扩展名或排除字符串来;但,这样肯定不完善。

这个问题根源应该在 cdn-enabler\inc\cdn_enabler_engine.class.php 文件中的 rewriter() 函数,其中正则表达式,应该忽略掉紧跟在空格后的 /或\ 形状的路径。对于IT技术内容来说,确实非常造成麻烦。考虑过,通过 is_excluded() 函数把linux目录全部加入忽略,但,这仍然是很有限的,因为,对于一个程序项目而言,以项目作为根目录的写法也很常见。

所以,对这个(相当复杂晦涩)正则表达式做了个小修改,实际使用中看起来与预期一致,但,似乎并不很能保证正确性。

Last Updated on 2025/01/26

发表评论

这个站点使用 Akismet 来减少垃圾评论。了解你的评论数据如何被处理