如果可能的話,我不會觸及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