像@tom-j-nowell 在对OP的评论中说,多站点可以让这变得更容易。
性能和安全性对多站点来说并不是一个真正的问题(至少,不比常规安装更严重),但我同意多站点有时可能是一个问题,因为许多插件(无论是自定义插件还是第三方插件)可能无法在多站点上正常工作,或者可能是因为您想让不同网站的用户完全分开。
也就是说,你想要实现的目标并不难。
在安装之间需要更改的是:
这些配置可以使用constants in wp-config.php
您唯一的问题是如何根据URL切换它们。
服务器变量\'SERVER_NAME\'
至少在您的Web服务器配置正确的情况下,它应该适合您。
例如,您可以创建一个名为/conf
在同一级别wp-config.php
文件和/WordPress
文件夹
在该文件夹中,您可以添加一些文件:
branch1.domain.com.conf
branch2.domain.com.conf
branch3.domain.com.conf
在每一个内部,您可以执行以下操作
$branch = \'branch1\';
$base_dir = dirname( __DIR__) . "/{$branch}";
defined( \'WP_CONTENT_DIR\' ) or define( \'WP_CONTENT_DIR\', $base_dir );
// be sure WP understand URLs correctly
defined( \'DB_HOME\' ) or define( \'DB_HOME\', "{$branch}.example.com" );
defined(\'WP_SITEURL\') or define(\'WP_SITEURL\', "{$branch}.example.com/WordPress");
// adjust DB settings as needed
defined( \'DB_NAME\' ) or define( \'DB_NAME\', $branch );
defined( \'DB_USER\' ) or define( \'DB_USER\', $branch );
defined( \'DB_PASSWORD\' ) or define( \'DB_PASSWORD\', \'********\' );
unset( $base_dir, $branch );
这将根据“分支”在每个配置文件上更改。
之后,在你独特的wp-config.php
您可以这样做:
$defaults_conf = [
\'WP_CONTENT_DIR\' => __DIR__ . \'/branch1\',
\'DB_HOST\' => \'localhost\',
\'DB_NAME\' => \'branch1\',
\'DB_USER\' => \'branch1\',
\'DB_PASSWORD\' => \'********\',
];
$host = getenv(\'WORDPRESS_HOST\') ?: $_SERVER[\'SERVER_NAME\'];
if ($host && file_exists(__DIR__."/conf/{$host}.conf")) {
require __DIR__."/conf/{$host}.conf";
}
array_walk($defaults_conf, function($value, $name) {
defined($name) or define($name, $value);
});
unset($defaults_conf, $host);
上面发生的情况是,根据服务器名称加载不同的配置文件(如果找到),并且如果配置文件未定义任何默认配置(或者如果未找到文件),则根据默认设置配置。
很好的一点是,要添加新分支,只需创建分支文件夹并提供.conf
以新的分支域命名,您已经完成了,在WP方面没有什么可以更改的。
线路:
$host = getenv(\'WORDPRESS_HOST\') ?: $_SERVER[\'SERVER_NAME\'];
就是我得到域名的地方。作为第一个选择,我使用一个环境变量,因为有机会
$_SERVER[\'SERVER_NAME\']
在命令行上下文中不起作用,例如在使用WP CLI时。在这些情况下,您可以设置环境变量以强制WP使用特定分支的设置。
注意,在分支特定的配置文件中,我正在更改WP_CONTENT_DIR
这将自动将插件和主题文件夹设置为相关/plugins
和/themes
分支子文件夹。
这里可能存在的一个问题是,如果您想共享/uploads
文件夹(上载文件的位置)。
默认情况下,该文件夹是content dir的子文件夹,因此使用上面的工作流将是/uploads
每个分支根文件夹的子文件夹。
如果这对你来说不是一个问题,那就去做吧,否则最简单的解决办法就是/uploads
在每个分支文件夹中,都有一个指向要共享的real uploads文件夹的符号链接。