ECS 云服务器 SWAS 轻量应用服务器 RDS 云数据库 Redis 云数据库 CDN 内容分发 OSS 对象储存 SLB 负载均衡 NAT 网关 DNS 云解析 MAIL 企业邮箱 WAF 应用防火墙 DDoS 高防 SMS 短信包 MK 云市场 XIN 心选 IM 商标注册 JZ 自营做网站

  WordPress 3.0以上的版本支持直接开启多站点机制,这样一来,你可以在一个后台切换多个站点进行管理。

  最近准备忙活一个主题演示站,给每位主题使用独立的子站点来搭建演示,如果是Apache环境,配置就比较容易,但是笔者使用的是 Nginx,花了大量的时间检测了N多网路上的伪静态规则,最终找到了完美的解决办法。下面就分享下Linux下 Apache 和 Nginx 两种环境开启多站点的方式。Windows系统环境直接靠边站吧。

  开启网路配置

  在网站根目录下的 wp-config.php 添加:

  <pre class="line-numbers language-php">define('WP_ALLOW_MULTISITE', true);</pre>

  配置多站点方式

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

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

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

  <pre class="line-numbers language-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);`</pre>

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

  <pre class="line-numbers language-php">`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);`</pre>

  添加伪静态规则Apache 规则

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

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

  <pre class="line-numbers language-php">`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]`</pre>

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

  <pre class="line-numbers language-php">`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]`</pre>

  Nginx 规则

  服务器使用的是 军哥 LNMP 1.3 安装包配置的。

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

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

  在最后一个 } 的旁边添加下边的代码:

  <pre class="line-numbers language-php">`#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;`</pre>

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

  server_name ;

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

  server_name *.;

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

  <pre class="line-numbers language-php">`
/root/lnmp restart`</pre>

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

  附:以下是 Nginx 下最完整的多站点配置代码typecho nginx 伪静态,实际使用时,请依照自己的实际更改域名及网站目录,同时建议删掉富含英文的行:

  <pre class="line-numbers language-php">`# 根据自己的实际修改下面的域名
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;

  修改固定链接结构主站点

  这里说的主站的,默认就是最初安装时的主域名typecho nginx 伪静态,比如

  如果是 子域名 模式,你可以直接在这个主站的的 设置 > 固定链接 直接更改即可。

  如果是 子目录 模式,主站点的文章都手动在链接中添加了 /blog/,如果你直接在这个子目录站点的 设置 > 固定链接 设置结构,是难以清除 /blog/ 的,而且在 lnmp 环境下,直接更改会手动添加 index.php。

Last modification:December 22nd, 2020 at 09:34 am
如果觉得我的文章对你有用,请随意赞赏