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