問題描述
我們有 10 個博客在一些 EC2 實例上運行,我們想看看所有的博客是否可以共享相同的 wordpress php 代碼
-
當我更新 Wordpress 時,所有的博客都會被更新
-
在 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/whatever 到 http://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 輔助翻譯的英文資料結果。如果您對結果不滿意,可以加入我們改善翻譯效果:薇曉朵技術論壇。