如何将WordPress多站点子目录站点设为根域名主站?
最佳实现方案:调整多站点配置+服务器内容映射
不需要用重定向(重定向会改变用户访问的URL),也不用导出导入数据,直接通过以下步骤实现「访问根域名显示子站点内容、旧站点保留独立访问入口」的需求:
1. 配置WordPress多站点的站点切换逻辑
- 登录WordPress后台的网络管理→站点,记录两个站点的ID:
- 原根站点(
www.example.com)的ID(通常默认是1) - 子目录站点(
www.example.com/new-site)的ID(比如是2)
- 原根站点(
- 打开服务器上的
wp-config.php文件,在多站点定义区域添加一行:define('SUNRISE', 'on'); - 在WordPress根目录新建
sunrise.php文件,写入以下代码(替换$new_site_id为你的子站点实际ID):<?php global $wpdb; $new_site_id = 2; // 替换成你的子目录站点ID $new_site = $wpdb->get_row($wpdb->prepare("SELECT * FROM {$wpdb->blogs} WHERE blog_id = %d", $new_site_id)); if ($new_site) { $wpdb->blogid = $new_site_id; $current_site->blog_id = $new_site_id; $current_blog = $new_site; define('BLOG_ID_CURRENT_SITE', $new_site_id); define('PATH_CURRENT_SITE', $new_site->path); }
2. 配置服务器重写规则(适配Apache/Nginx)
Apache环境
打开根目录的.htaccess文件,确保多站点重写规则能配合sunrise.php生效,原规则无需大幅修改,保持默认多站点规则即可:
RewriteEngine On RewriteBase / RewriteRule ^index\.php$ - [L] 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]
Nginx环境
打开站点配置文件(比如/etc/nginx/sites-available/example.com),在location /块中添加站点ID映射规则:
set $blog_id 2; # 替换为你的子站点ID # 给旧站点留访问入口,比如用/old-site路径 if ($request_uri ~ ^/old-site) { set $blog_id 1; # 替换为原根站点的ID } include /usr/share/nginx/wordpress-multisite.conf; # 加载多站点通用规则
3. 保留旧站点的独立访问入口
- 回到WordPress网络管理的站点列表,编辑原根站点的设置,将其路径修改为
/old-site(或你自定义的其他路径)。 - 完成后,用户访问
www.example.com会显示子站点内容,访问www.example.com/old-site可继续查看原根站点内容,完全满足你不覆盖旧站点的需求。
为什么不用重定向?
重定向会强制用户URL跳转到/new-site,而你需要的是URL保持根域名但显示子站点内容,上述方法属于「内容映射」,更贴合你的需求,用户体验更流畅。
内容的提问来源于stack exchange,提问作者annaM
相关产品推荐
相关产品推荐

