WordPress多站点必备插件及部署流程

WordPress多站点必备插件及部署流程

一、必备插件

Admin Language Per User

简介:前后台不同语言,每个用户可自由设置自己的 WordPress 后台语言

wordpress官方:cn.wordpress.org/plugin

MultiSite Clone Duplicator

简介:多站点克隆复制

wordpress官方:wordpress.org/plugins/m

Network Media Library

简介:多站点媒体库共享

wordpress官方:github.com/humanmade/ne

WordPress MU Domain Mapping

简介:多站点域名映射,为每个站点绑定不同的域名

wordpress官方:wordpress.org/plugins/w

插件主页:odd.blog/wordpress-mu-d

WP Multisite User Sync

简介:多站点用户共享、角色同步插件

wordpress官方:wordpress.org/plugins/w

二、拓展插件

UpdraftCentral

简介:多站点统一管理,可以集中管理备份,更新等,快速有效地访问每个站点。

wordpress官方:wordpress.org/plugins/u

site-setup-wizard

简介:允许注册用户以步骤条引导形式来创建新网站,包含许多设置选项,例如他们的网站类型,类别,地址,主题,他们想要激活的插件,隐私等。

wordpress官方:wordpress.org/plugins/s

github:github.com/neelakansha8

WP Real Media Library

简介:媒体库分类管理插件

插件主页:matthias-web.com/wordpr

三、部署流程

1、准备工作,域名解析

将域名解析绑定到主机

我们准备几个域名,如下:

  • 站点一:yourdomain.com(主域名),这是安装WordPress时用的域名
  • 站点三:news.com映射的二级目录 yourdomain.com/news/
  • 站点四:shop.com映射的二级域名 yourdomain.com/shop/

2、开启网络配置

define('WP_ALLOW_MULTISITE', true);               

3、配置多站点模式(建议:子目录模式)

刷新网站后台,访问 工具 > 配置网络,根据自己的需要选择“子域名”或者“子目录”模式,然后点击“安装”:

只有新安装的WordPress,并且绑定了域名,这时候才可以选择“子域名”模式。

如果你选择是的“子域名”,安装后,请将下面的代码添加到网站根目录下的 wp-config.php 下:

define('MULTISITE', true);
define('SUBDOMAIN_INSTALL', true);
define('DOMAIN_CURRENT_SITE', 'yourdomain.com');
define('PATH_CURRENT_SITE', '/');
define('SITE_ID_CURRENT_SITE', 1);
define('BLOG_ID_CURRENT_SITE', 1);

如果选择的是“子目录”,则添加:

define('MULTISITE', true);
define('SUBDOMAIN_INSTALL', false);
define('DOMAIN_CURRENT_SITE', 'yourdomain.com');
define('PATH_CURRENT_SITE', '/');
define('SITE_ID_CURRENT_SITE', 1);
define('BLOG_ID_CURRENT_SITE', 1);             

4、添加伪静态规则

Apache 规则

如果你的服务器使用的是Aache环境,使用下面的代码替换网站根目录下的 .htaccess 里面的所有代码

子域名模式下的规则代码:

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]     

子目录模式下的规则代码:

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]         

Nginx 规则

假设你的网站为 yourdomain.com,那么你可以编辑这个配置文件:

vi /usr/local/nginx/conf/vhost/yourdomain.com.conf         

最后一个 } 的前面添加下面的代码:

#ignored: “-” thing used or unknown variable in regex/rew
rewrite ^/([_0-9a-zA-Z-]+/)?wp-admin$ /$1wp-admin/ permanent;
if (-f $request_filename){
	set $rule_2 1;
}
if (-d $request_filename){
	set $rule_2 1;
}
if ($rule_2 = "1"){
#ignored: “-” thing used or unknown variable in regex/rew
}
rewrite ^/([_0-9a-zA-Z-]+/)?(wp-(content|admin|includes).*) /$2 last;
rewrite ^/([_0-9a-zA-Z-]+/)?(.*.php)$ /$2 last;
rewrite /. /index.php last;   

以上的规则对于 子域名 和 子目录 模式都正常使用,但是,如果你选择的是 子域名 模式,还需要找到:

server_name yourdomain.com;             

添加一个泛域名 *.yourdomain.com,如下:

server_name yourdomain.com *.yourdomain.com;          

保存文件,然后重启服务器。

然后在你的域名管理那里添加一条泛域名 *.yourdomain.com 解析到主机IP(或者分别解析你即将要使用的子域名到主机IP),这样一来,创建子域名站点时,就可以正常访问了。

附:以下是 Nginx 下最完整的多站点配置代码,实际使用时,请根据自己的实际修改域名及网站目录,同时建议删除含有中文的行:

# 根据自己的实际修改下面的域名
log_format  yourdomain.com  '$remote_addr - $remote_user [$time_local] "$request" '
             '$status $body_bytes_sent "$http_referer" '
             '"$http_user_agent" $http_x_forwarded_for';
server
        {
                listen       80;
                # 根据自己的实际修改下面的域名
                server_name yourdomain.com *.yourdomain.com;
                index index.html index.htm index.php default.html default.htm default.php;
                # 注意修改下面的网站目录
                root  /mnt/wwwroot/yourdomain.com; 
 
                #include wordpress.conf;
                #以下是 lnmp 1.0 的 wordpress.conf 规则,也就是上一行 include wordpress.conf 里面的
                location / {
                    if (-f $request_filename/index.html){
                        rewrite (.*) $1/index.html break;
                    }
                    if (-f $request_filename/index.php){
                        rewrite (.*) $1/index.php;
                    }
                    if (!-f $request_filename){
                        rewrite (.*) /index.php;
                    }
                }
                # wordpress.conf 规则 结束

                location ~ .*\.(php|php5)?$
                        {
                                try_files $uri =404;
                                fastcgi_pass  unix:/tmp/php-cgi.sock;
                                fastcgi_index index.php;
                                include fcgi.conf;
                        }
 
                location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$
                        {
                                expires      30d;
                        }
                location ~ .*\.(js|css)?$
                        {
                                expires      12h;
                        }
 
                access_log  /home/wwwlogs/huchangmeng.com.log  huchangmeng.com;
 
                #ignored: “-” thing used or unknown variable in regex/rew
                rewrite ^/([_0-9a-zA-Z-]+/)?wp-admin$ /$1wp-admin/ permanent;
                if (-f $request_filename){
                    set $rule_2 1;
                }
                if (-d $request_filename){
                    set $rule_2 1;
                }
                if ($rule_2 = "1"){
                    #ignored: “-” thing used or unknown variable in regex/rew
                }
                rewrite ^/([_0-9a-zA-Z-]+/)?(wp-(content|admin|includes).*) /$2 last;
                rewrite ^/([_0-9a-zA-Z-]+/)?(.*.php)$ /$2 last;
                rewrite /. /index.php last;
 
        }           

5、固定链接设置(取消默认前缀/blog)

子目录形式多站点,固定链接默认会在分类前面加前缀“/blog”

Go to /wp-admin/network/site-info.php?id=1
Network Admin -> Sites -> Edit -> check Permalink Structure.

6、安装必备插件

安装好文章开头提到的多站点必备插件

7、所有站点共享媒体库

安装好“Network Media Library”插件后,将下面的代码添加到主题目录下的 functions.php 下

// 将站点ID=1的媒体库共享给所有站点
add_filter( 'network-media-library/site_id', function( $site_id ) {
    return 1;
} );

8、克隆站点

安装好“MultiSite Clone Duplicator”插件,就可以克隆多站点网络中任意站点

9、域名映射

在这里安装 WordPress MU Domain Mapping 插件,直接搜索或者下载安装都可以,然后启用。

接着复制插件目录(目录wp-content/plugins/wordpress-mu-domain-mapping)下的 sunrise.php 文件到 wp-content 目录。

打开wp-config.php文件,将下面的代码添加到网站根目录下的 wp-config.php 下:

/* domain mapping */
define( 'SUNRISE', 'on' );      

保存,然后返回浏览器,在后台中打开面板左上角 我的站点 > 网络管理 > 设置。

再选择Domain Mapping,修改 Domain Options 为如下图:

然后保存。

这里的配置的功能是:重定向所有二级域名(如 news.awaimai.com )到各自的外部域名(如 news.com),包括管理页面(/wp-admin)。

接下来,我们要映射一级域名到各个站点ID。

后台控制面板切换到 设置 > Domains,加入两个域名:

  • Site ID:3(以自己实际为主)
  • Domian:news.com
  • Primary:

以及:

  • Site ID:4(以自己实际为主)
  • Domian:shop.com
  • Primary:

如果域名是有www的,一样的操作方式。

10、克隆站点配置更新

域名映射做好之后,更新一下克隆站点的配置

将“http://www.yourdomain.com/subdirectory/”
改为"http://subdomain.yourdomain.com/"         

11、重启服务器

以上步骤完成之后,重启服务器,基本就OK了。

主站点域名还是不变,还是yourdomain.com

用 news.com 就可以访问新闻站点,

用 shop.com 就可以访问商城站点,

同时,这几个站点的后台也有独立的地址:

http://www.yourdomain.com/wp-admin/
http://news.com/wp-admin/
http://shop.com/wp-admin/

以后再安装主题和插件不能在每个站点中安装了,

都统一在网络管理(面板左上角 我的站点 > 网络管理 )中进行配置。

每日壁纸

留下评论

您的电子邮箱地址不会被公开。 必填项已用 * 标注