如果您曾经安装过WordPress Multisite,则知道它首先要您做的是“ 请选择您是否希望WordPress网络的站点使用子域或子目录。您以后将无法更改此设置。” 从现在开始,您将需要遵循不同的步骤,具体取决于您的选择,并且不能逆转。但是生活经历了许多转折,您可能会发现自己需要沿途更改模型,这是WordPress本身不允许的。该怎么办?
结论是:您可以将WordPress多站点从子域更改为子文件夹,反之亦然。但这需要一些微妙的动作,因此,强烈建议您备份数据库,wp-config.php和.htaccess文件,以防出现任何问题。警告:切勿在生产中这样做。
将WordPress多站点从子域更改为子文件夹
也就是说,从http://site1.mydomain.com/转到http://mydomain.com/site1/。
步骤1
在我们的wp-config.php配置文件中,查找以下行:
define( 'SUBDOMAIN_INSTALL', true );
并替换为以下内容:
define( 'SUBDOMAIN_INSTALL', false );
保存更改。
第2步
转到.htaccess文件,然后查找#BEGIN WordPress和#END WordPress之间的规则。您将拥有:
# BEGIN WordPress
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
# add a trailing slash to /wp-admin
RewriteRule ^wp-admin$ wp-admin/ [R=301,L]
RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^ - [L]
RewriteRule ^(wp-(content|admin|includes).*) $1 [L]
RewriteRule ^(.*\.php)$ $1 [L]
RewriteRule . index.php [L]
# END WordPress
and we will replace it with:
# BEGIN WordPress
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
# add a trailing slash to /wp-admin
RewriteRule ^([_0-9a-zA-Z-]+/)?wp-admin$ $1wp-admin/ [R=301,L]
RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^ - [L]
RewriteRule ^([_0-9a-zA-Z-]+/)?(wp-(content|admin|includes).*) $2 [L]
RewriteRule ^([_0-9a-zA-Z-]+/)?(.*\.php)$ $2 [L]
RewriteRule . index.php [L]
# END WordPress
保留更改。
第三步
访问数据库并查找表wp_blogs,您将发现类似以下内容:

由于我们打算移至子文件夹,因此必须在表wp_blogs的domain字段中手动设置主站点为多站点的所有站点。在路径字段中,我们将输入曾经是我们的子域的名称。该表如下所示:


如果您只有几个站点,则可以轻松地手动完成此任务。但是,如果您有成百上千个站点,则可能需要编写一个小的脚本来自动执行此任务。
步骤4
如您所知,WordPress会存储您的所有链接,因此有必要替换我们所有网站的所有URL。为此,您需要使用WP-CLI或“ 搜索和替换”脚本。但是,请勿手动执行此操作或直接对数据库进行更新,因为可能会丢失序列化的信息。
第五步
检查一切是否正常。
将WordPress多站点从子文件夹更改为子域
如果您要将子文件夹的多站点传递到子域,则过程完全相同,但是相反:
- 有关数据库以及wp-config.php和.htaccess文件的安全性副本
- 在wp-config.php 中将> SUBDOMAIN_INSTALL设置为true
- 通过子域更改htaccess中的规则(此处有更多信息)
- 在所有站点中更改wp_blogs表的domain列,建立每个站点的子域。只需将路径栏留在/
- 通过搜索和替换或WP-CLI脚本,将所有类型为mydomain.com/site1的 URL替换为site1.mydomain.com
- 检查一切是否正常。
--- END ---