问题描述

我们有 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 辅助翻译的英文资料结果。如果您对结果不满意,可以加入我们改善翻译效果:薇晓朵技术论坛。