2014-09-23 99 views
3

phpBB有很多靜態資源,並從不同的服務器提供服務,而不是動態論壇的服務器可能意味着顯着的性能提升。我們可以在將來設置過期標題,並可能在未來使用CDN。從另一臺服務器上提供phpBB靜態資源?

從我到目前爲止所做的檢查,似乎更改functions.php以指示不同的基礎目錄可能工作。代碼

$web_path = '//some.new.domain/path'/*(defined('PHPBB_USE_BOARD_URL_PATH') && PHPBB_USE_BOARD_URL_PATH) ? $board_url : $phpbb_root_path*/; 

然而,這是我不清楚這是否可能有其他影響,如製作上傳的目錄無法訪問的路徑似乎本地到服務器。此外,它不能解決動態CSS的使用styles.php

是否有一個快速的方法來指示改變靜態資源而不破壞的phpBB代碼的生成?

回答

1

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

+0

謝謝你的時間與這個詳細的答案,但我恐怕這不是很有幫助,並不回答我的問題在哪裏做phpBB的變化。我們不使用Apache,而301重定向永遠不會比提供正確的資源更好,因爲您仍然提出服務器請求。用NginX重寫HTML可能是一個不錯的選擇,但是由於許多資源都是相對的,我仍然可以自己弄清楚這一切,所以這不是一個完整的答案。 CSS:最好能夠將它們全部合併成一個具有修改文件名的靜態文件。所以謝謝,但這裏沒有解決辦法。 – Collector 2014-10-03 00:30:16

+0

我不太確定解決方案存在*除非我們簡化設置並至少放棄pagespeed。我甚至沒有考慮其他問題,如CORS。我會更多的嘟on一下...... – LSerni 2014-10-03 06:49:24

+0

當然,有一個解決方案存在,我已經開始通過更改PhpBB代碼來實現它(正如我在我的問題中所寫的那樣)。然而,正如我以前想象別人可能做到的那樣,我認爲像這樣的問題可能會讓我(以及其他人在後面閱讀)在很多時間重新實現同樣的事情。 CORS與它有什麼關係?!?!我們只需將生成的HTML更改爲包含來自其他服務器的靜態資源。如果來自域X的頁面包含來自域Y的JavaScript,它仍然在域X內運行。 – Collector 2014-10-03 14:54:54

0

考慮到你的問題的日期,我認爲你已經在使用phpBB 3.1,在這種情況下,你可以寫一個擴展程序來做你想做的事情,保持phpBB代碼完好無損,並且不會干擾論壇升級。 如果您不是,那麼您將被禁止修改代碼或其他解決問題的方法。

對於3.1,您需要編寫一個插入事件'core.page_header_after'的插件,該插件將在page_header()函數結束時執行。這使您可以覆蓋標題中創建的所有模板變量,如果您希望在模板中使用其他模板變量,則可以添加新變量。

在你的情況,你需要看看分配這些變量。

'T_ASSETS_PATH'   => "{$forum_static_url}assets", 
'T_THEME_PATH'   => "{$forum_static_url}styles/" . rawurlencode($this->user->style['style_path']) . '/theme', 
'T_TEMPLATE_PATH'  => "{$forum_static_url}styles/" . rawurlencode($this->user->style['style_path']) . '/template', 
'T_SUPER_TEMPLATE_PATH' => "{$forum_static_url}styles/" . rawurlencode($this->user->style['style_path']) . '/template', 
'T_IMAGES_PATH'   => "{$forum_static_url}images/", 
'T_SMILIES_PATH'  => "{$forum_static_url}{$this->config['smilies_path']}/", 
'T_AVATAR_PATH'   => "{$forum_static_url}{$this->config['avatar_path']}/", 
'T_AVATAR_GALLERY_PATH' => "{$forum_static_url}{$this->config['avatar_gallery_path']}/", 
'T_ICONS_PATH'   => "{$forum_static_url}{$this->config['icons_path']}/", 
'T_RANKS_PATH'   => "{$forum_static_url}{$this->config['ranks_path']}/", 

注意,在上面的例子中,我已經換了PHPBB的一貫網址與forum_static_url變量,它可以裝滿你的域名從那裏你想服務於靜態文件的URL。

我希望這會有所幫助。 看看已經免費提供給phpBB3.1的一些擴展,以瞭解如何實現這個簡單的擴展。

相關問題