假设所有安装都在同一个实例上,因此可以在它们之间共享相同的文件,那么您需要做的主要事情是让所有自定义内容都位于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/whatever 到http://example.com/wp/whatever. 基本上,它使其工作起来好像/wp/实际上位于站点的根目录中。
第二条规则将对根url(仅/)的请求更改为/wp/索引。php文件。这可能不是严格需要的,但对我来说很有用。
这允许/wp目录保持原样的“纯”,因此您可以使用符号链接或硬链接将一个真正的wp安装保持在其他地方,不受特定站点内容的影响。
请注意,许多写得不好的插件(甚至一些主题)可能会假定它们位于主wp内容文件夹中。做一些愚蠢的事情include \'../../../wp-load.php\';
或类似的情况将被这种方法打破。此错误属于插件/主题部分。No plugin/theme should ever include wp-load.