如何共享WordPress核心库

时间:2012-07-01 作者:Yoga

我们有十个博客运行在一个小小的EC2实例上,我们想看看是否所有的博客都可以共享相同的wordpress php代码

当我更新Wordpress时,所有博客都会更新,在Apache/mod\\u php中保存内存,因为缓存中没有重复的脚本或字节码(如果是APC)我们不能使用MU,因为我们需要将所有博客放在一个单独的数据库中,所以当我们以后需要移动它们时,会更容易。

以前有人试过这个吗?

2 个回复
最合适的回答,由SO网友:Otto 整理而成

假设所有安装都在同一个实例上,因此可以在它们之间共享相同的文件,那么您需要做的主要事情是让所有自定义内容都位于WordPress主文件夹之外。

因此,首先,你需要一个新的WordPress副本,不动(也不动,关键是要有一个副本,对吧?)。

接下来,您将使用硬链接或符号链接将这些文件镜像到其他地方。通常在类unix环境中,您使用ln -s 进行符号链接。具体如何做到这一点由读者决定,但基本上,如果您在/example/wp中有您的WordPress,您可以执行以下操作ln -s /example/wp /home/username/public_html/wp 或者类似的东西。如果sym链接导致问题,请切换到硬链接。

现在,位于WordPress主文件夹中的两个主要内容是自定义的,而不是“核心”的一部分wp-config.php 文件,以及整个wp-content 文件夹因此,我们需要在每个站点的主/wp文件夹之外获取这些内容。这两种都是可能的。

wp配置。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即可。上面目录中的php文件。

对于wp内容文件夹,可以通过向wp配置中添加代码将其重新定位到主wp目录之外。php文件如下所示:

 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规则(对于非默认永久链接)本质上告诉Apache将所有请求重定向到主WordPress索引。如果请求没有引用实际存在的文件,则返回php文件。这允许上传的图片等直接在WP之外工作。

下面是一个可以在/home/username/public\\u 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/。这具有重新映射所有URL的效果http://example.com/whateverhttp://example.com/wp/whatever. 基本上,它使其工作起来好像/wp/实际上位于站点的根目录中。

第二条规则将对根url(仅/)的请求更改为/wp/索引。php文件。这可能不是严格需要的,但对我来说很有用。

这允许/wp目录保持原样的“纯”,因此您可以使用符号链接或硬链接将一个真正的wp安装保持在其他地方,不受特定站点内容的影响。

请注意,许多写得不好的插件(甚至一些主题)可能会假定它们位于主wp内容文件夹中。做一些愚蠢的事情include \'../../../wp-load.php\'; 或类似的情况将被这种方法打破。此错误属于插件/主题部分。No plugin/theme should ever include wp-load.

SO网友:SickHippie

在你的基本前提中,有两件事是没有意义的。首先,如果在不同的实例中有十个博客,那么它们不能共享相同的代码库——十个EC2实例=十个服务器,因此需要十组文件。其次,出于同样的原因,不可避免地会有重复的脚本。你能在实例之间串话吗?我不这么认为,但即使您有两个站点试图从同一个代码库运行,也会有wp-config.php 至少与数据库设置冲突。

我真的不确定multisite是否适合这里。虽然所有博客都存在于同一个DB中,但它们都有一个特定于博客的表前缀,这使得DB备份更容易(一个DB比十个DB),并且仍然允许可移植性(请参阅here 了解更多信息)。将一个博客从多站点中移出有点乏味,这并不比将一个站点移至另一个域更乏味。

听起来你想要的是拥有十个不同的WP环境,但其中只有一个完整的代码库,这是WPMS的核心-一个代码库,多个站点。因此,您对“相同的代码库,但不是多站点”的要求是相互排斥的,这就是为什么已经4天没有人回答这个问题的原因。听起来你需要重新考虑一下你的需求。

现在,或者,如果您只想确保WP在全球范围内更新,可以考虑hooking your core WordPress installs into SVN. 您可以对单个插件执行相同的操作,只要它们位于存储库中。这样,您只需运行一个shell脚本来命中实例svn up 同时跨越所有十个。然而,为了避免多站点安装,这似乎需要做很多工作。

结束

相关推荐

在MultiSite中的循环外部获取_Author_meta的$user_id

因此,我目前正在运行一个多站点安装,超级管理员将创建所有新站点。我们使用的其中一个模板有一个贷款官员的博客页面。我正在扩展用户配置文件,以便新用户可以输入需要在其页面上显示的关键数据。除了创建站点时自动添加的超级管理员之外,每个站点只有一个用户。我发现,如果要使用该函数,需要指定用户IDthe_author_meta(); 循环外部。这是我的问题。我无法在模板中输入ID,因为每个新的贷款官员都将使用相同的主题模板。那么,如何使这些字段成为动态的呢?下面是配置文件部分的图像,以便LO在视觉上有所帮