問題描述

我們有 10 個部落格在一些 EC2 例項上執行,我們想看看所有的部落格是否可以共享相同的 wordpress php 程式碼

  1. 當我更新 Wordpress 時,所有的部落格都會被更新

  2. 在 Apache /mod_php 中將記憶體儲存為快取中的重複指令碼或位元組碼 (在 APC 情況下) 。

我們不能使用 MU,因為我們需要在一個單獨的資料庫中的所有部落格,所以當以後,當我們需要移動它將會更容易。

有人試過這個嗎?

最佳解決思路

假設所有的安裝都在同一個例項上,因此可以在它們之間共享相同的檔案,那麼您需要做的主要事情是讓所有的自定義內容都存在於主 WordPress 資料夾之外。

那麼首先,你會想要一個新的 WordPress 的副本在某個地方,沒有改變 (不可觸及的,整個點是一個單一的副本,對嗎?

接下來,您將使用 hard-links 或 sym-links 在其他地方將這些檔案映象。通常在 unix-like 環境中,您可以使用 ln -s 進行符號連結。如何做這個具體是留給讀者,但基本上如果你有你的 WordPress 在/example /wp,你會做一些像 ln -s /example/wp /home/username/public_html/wp 或類似的東西。如果 sym-links 導致問題,請改為 hard-links 。

現在,主要的兩個東西是主要的 WordPress 資料夾,但它是自定義的,而不是”core” 的一部分是您的 wp-config.php 檔案和整個 wp-content 資料夾。因此,我們需要將這些檔案放在每個站點的 main /wp 資料夾之外。這兩個都是可能的。

wp-config.php 檔案很容易,因為預設情況下,WordPress 還會自動檢查一個目錄。如果您的 wp 資料夾位於/home/username/public_html/wp,那麼 WP 將檢查/home/username/public_html/wp/wp-config.php,但是不能查詢/home/username/public_html/wp-config.php 。所以只需將您的 wp-config.php 檔案放在上面的目錄中。

對於 wp-content 資料夾,您可以透過向 wp-config.php 檔案新增程式碼將其重新定位到主 wp 目錄外,如下所示:

 define( 'WP_CONTENT_DIR', '/home/username/public_html/custom-content' );
 define( 'WP_CONTENT_URL', 'http://example.com/custom-content');

然後 WordPress 將期望內容和其中的一切都存在於此。 /wp 目錄中的 wp-content 資料夾將被完全忽略,因此您必須製作這個資料夾,並將您的主題/外掛/上傳到那裡。

最後一步是使用.htaccess(或者一些其他的配置檔案,如果你不使用 Apache) 看到/wp 資料夾是從根可見,就好像它在那裡。這並不棘手,只需要一點思考。請參閱,正常的 WordPress .htaccess 規則 (對於 non-default 永久連結) 實質上告訴 Apache 將所有請求重定向到主 WordPress 的 index.php 檔案,如果請求沒有引用實際存在的檔案。這允許上傳的圖片等直接在 WP 之外工作。

這是一個可以在/home/username/public_html/.htaccess 中使用的示例規則集,以模擬這個,但也可以是/wp 目錄。

Options -Indexes
RewriteEngine on
RewriteCond %{HTTP_HOST} ^(www.)?example.com$
RewriteCond %{REQUEST_URI} !^/wp/
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /wp/$1
RewriteCond %{HTTP_HOST} ^(www.)?example.com$
RewriteRule ^(/)?$ wp/index.php [L]

這些規則本質上說兩件事情。

首先:如果請求的 URL 沒有/wp /,並且它不是現有的檔案或目錄,那麼使用內部重寫來更改 URL,以便在/wp /前面。這具有重新對映從 http://example.com/whateverhttp://example.com/wp/whatever 的所有 URL 的效果。基本上,它使得它的工作就像/wp /實際上在網站的根目錄中一樣。

第二個規則將 root URL 的更改請求 (只是//) 更改為/wp/index.php 檔案。這可能不是嚴格需要的,但它對我有用。

這樣允許/wp 目錄保持為”pure”,因此您可以使用符號連結或硬連結將 one-true-WP 安裝在其他位置,不受 site-specific 的影響。

請注意,許多嚴重的外掛 (甚至幾個主題) 可能會假設它們位於主要的 wp-content 資料夾中。像 include '../../../wp-load.php'; 或類似的東西做任何愚蠢的事情都會被這種方法所破壞。這個錯誤是外掛/主題的一部分。 No plugin/theme should ever include wp-load

參考文獻

注:本文內容整合自 Google/Baidu/Bing 輔助翻譯的英文資料結果。如果您對結果不滿意,可以加入我們改善翻譯效果:薇曉朵技術論壇。