问题描述
我看到一些看起来很相似的问题,但他们都是以 multisite 结束的。对于可维护性,性能和安全性,我不想使用多站点。所以请忍受我。
这正是我在想的:
.
|_____branch1 // for branch1.domain.com
| |_____themes
| |_____plugins
|
|_____branch2 // for branch2.domain.com
| |_____themes
| |_____plugins
|
|_____branch3 // for branch3.domain.com
| |_____themes
| |_____plugins
|
|_____index.php
|_____WordPress
|_____wp-config.php
您可以看到,每个域都有自己的数据库和内容目录,但只有一个 WordPress 实例。现在,主题,插件和数据库变得更小,独立。那么,维护,规模更容易
但是有可能吗如果您以前遇到过同样的问题,请分享您的想法!我非常感谢你的帮助。
最佳解决方案
正如 @tom-j-nowell 在对 OP 的评论中所说的,多站点可以使这更容易。
性能和安全性对于多个站点来说并不是一个问题 (至少不是常规安装的问题),但是我同意多站点有时可能是一个问题,因为很多插件 (自定义或第三方) 可能不会在多站点上正常工作,或者是因为要让不同网站的用户完全分离。
那就是说你想要实现的不是那么难。
您需要在安装之间进行更改:
-
plugins 文件夹
-
主题文件夹
-
数据库设置
那些配置可以用 wp-config.php
中的常量来完成,你唯一的问题是如何根据 URL 进行切换。
服务器变量'SERVER_NAME'
应该适合您,至少如果您的 Web 服务器配置正确。
例如,您可以在 wp-config.php
文件和/WordPress
文件夹的同一级别创建名为/conf
的文件夹。
在该文件夹中,您可以添加一些文件:
-
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 );
这将根据”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 使用特定分支的设置。
请注意,在 branch-specific 配置文件中,我正在更改 WP_CONTENT_DIR
,并将自动将插件和主题文件夹设置为相关的/plugins
和/themes
分支子文件夹。
这里有一个可能的问题是如果你想共享/uploads
文件夹 (文件上传的地方) 。
默认情况下,该文件夹是内容目录的子文件夹,因此使用上面的工作流将是每个分支根文件夹的/uploads
子文件夹。
如果这不是一个问题,而不是只是去与它,否则最简单的解决方案是将/uploads
在每个分支文件夹中的一个符号链接到要共享的真正的 uploads 文件夹。
参考文献
注:本文内容整合自 Google/Baidu/Bing 辅助翻译的英文资料结果。如果您对结果不满意,可以加入我们改善翻译效果:薇晓朵技术论坛。