如果可能的话,我不会触及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
什么,绝不会被重定向,而是将请求并下载比你压缩,优化,但仍然较大'd愿望,从您的服务器合并CSS。
谢谢你的时间与这个详细的答案,但我恐怕这不是很有帮助,并不回答我的问题在哪里做phpBB的变化。我们不使用Apache,而301重定向永远不会比提供正确的资源更好,因为您仍然提出服务器请求。用NginX重写HTML可能是一个不错的选择,但是由于许多资源都是相对的,我仍然可以自己弄清楚这一切,所以这不是一个完整的答案。 CSS:最好能够将它们全部合并成一个具有修改文件名的静态文件。所以谢谢,但这里没有解决办法。 – Collector 2014-10-03 00:30:16
我不太确定解决方案存在*除非我们简化设置并至少放弃pagespeed。我甚至没有考虑其他问题,如CORS。我会更多的嘟on一下...... – LSerni 2014-10-03 06:49:24
当然,有一个解决方案存在,我已经开始通过更改PhpBB代码来实现它(正如我在我的问题中所写的那样)。然而,正如我以前想象别人可能做到的那样,我认为像这样的问题可能会让我(以及其他人在后面阅读)在很多时间重新实现同样的事情。 CORS与它有什么关系?!?!我们只需将生成的HTML更改为包含来自其他服务器的静态资源。如果来自域X的页面包含来自域Y的JavaScript,它仍然在域X内运行。 – Collector 2014-10-03 14:54:54