如果可能的话,我不会接触 PhpBB 的代码,而是求助于 Apache 的 URL 重写引擎。
在 PHPBB3 中,大部分静态内容(按大小)来自/assets/ 子目录。
如果:
- 您正在使用具有重写功能的浏览器,
- 启用
.htaccess 或同等功能
- 和
mod_rewrite 或同等安装,
在您可以放置的.htaccess 文件中,
Redirect permanent /assets http://mycdnhoster.com/collector/phpbb3/assets
这使您可以非常轻松地启用/禁用 CDN,而不必担心维护对 PhpBB 代码的修改。
“样式”和“主题”静态文件也是如此。 当浏览器仍然访问您的服务器只是在其他地方被弹跳时,会有轻微的性能损失,但对于现代流水线浏览器来说,这不是一个真正的问题。此外,在大多数情况下,重定向的资源会被浏览器“记住”,不会再次访问您的服务器(至少在一段时间内)。
提供了另一种可能性,例如NginX 是重写输出的 HTML。您可以使用HttpSubModule 将所有对您的站点/静态的引用转到另一个站点/不同路径/静态。
注意某些文件可能包含可能不再起作用的绝对链接,或可能“落在”重写范围之外的相对链接,等等不再工作。例如:
- javascript 文件使用“delayed load”或“增量/条件加载”插件和类似功能。
- 包含对字体和背景图像的引用的 CSS 文件 (
url(../../../path/...))。
还要注意,由于您指定了 pagespeed,mod_pagespeed 可能与这种类型的 URL 重写不兼容,因为它会解析 HTML 并尝试压缩其中引用的资源。因此,您最终可能会将所有繁重的 CSS 卸载到 CDN,它们仍然从您的服务器下载,嵌入到您的单个 mod_pagespeed 中的优化、压缩和难以识别的表单中本地 CSS 参考。
也就是说,在你的 html 中你有
<link href="/app/small.css" ... />
<link href="/static/big.css" ... />
<link href="/static/big2.css" ... />
并且您希望重写能够从异地加载静态文件。如果没有进一步的优化,将会发生什么。相反,您的客户会看到由mod_pagespeed 重写的页面,上面写着
<link href="/app/small+big+big2.css?pagespeed&whatever" />
他永远不会在/static 中请求任何内容,永远不会被重定向,而是会请求并下载压缩、优化、但仍然比您希望的更大的合并 CSS服务器。