本文目錄1開啟網絡配置2配置多站點模式3添加偽靜態規則3.1Apache 規則3.2Nginx 規則4修改固定鏈接結構4.1主站點4.2子站點本文是《WordPress 多站點》系列教程的第 1 部分,該系列共包含以下 6 個部分:WordPress 開啟多站點(含Apache和Nginx偽靜態規則)添加/移除 WordPress 多站點網絡的默認頁面WordPress 多站點網絡克隆網站數據和設置WordPress 多站點網絡共享圖片媒體文件WordPress 關閉多站點模式WordPress多站點網絡外掛和主題檢測:Network Plugin Auditor
WordPress 3.0以上的版本支援直接開啟多站點模式,這樣一來,你可以在一個後臺切換多個站點進行管理。
最近打算折騰一個主題演示站,給每個主題使用獨立的子站點來搭建演示,如果是Apache環境,配置就比較容易,但是使用的是 Nginx,花瞭大量的時間測試瞭N多網絡上的偽靜態規則,最終找到瞭完美的解決方法。下面就分享下Linux下 Apache 和 Nginx 兩種環境開啟多站點的方法。Windows系統環境直接靠邊站吧。
開啟網絡配置
在網站根目錄下的 wp-config.php 添加:
1 |
define('WP_ALLOW_MULTISITE', true); |
define(‘WP_ALLOW_MULTISITE’, true);
配置多站點模式
刷新網站後臺,訪問 工具 > 配置網絡,根據自己的需要選擇“子域名”或者“子目錄”模式,然後點擊“安裝”:
隻有新安裝的WordPress,並且綁定瞭域名,這時候才可以選擇“子域名”模式。
如果你選擇是的“子域名”,安裝後,請將下面的代碼添加到網站根目錄下的 wp-config.php 下:
1 2 3 4 5 6 |
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’, true);
define(‘DOMAIN_CURRENT_SITE’, ‘yourdomain.com’);
define(‘PATH_CURRENT_SITE’, ‘/’);
define(‘SITE_ID_CURRENT_SITE’, 1);
define(‘BLOG_ID_CURRENT_SITE’, 1);
如果選擇的是“子目錄”,則添加:
1 2 3 4 5 6 |
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); |
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);
添加偽靜態規則
Apache 規則
如果你的服務器使用的是Aache環境,使用下面的代碼替換網站根目錄下的 .htaccess 裡面的所有代碼
子域名模式下的規則代碼:
1 2 3 4 5 6 7 8 9 10 11 12 13 |
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 ^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]
子目錄模式下的規則代碼:
1 2 3 4 5 6 7 8 9 10 11 12 13 |
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] |
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 規則
測試的是 CentOS 5.4 32位系統,服務器使用的是 軍哥 LNMP 1.0 安裝包配置的。
假設你的網站為 yourdomain.com,那麼你可以編輯這個配置文件:
1 |
vi /usr/local/nginx/conf/vhost/yourdomain.com.conf |
vi /usr/local/nginx/conf/vhost/yourdomain.com.conf
在最後一個 } 的前面添加下面的代碼:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
#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; |
#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;
以上的規則對於 子域名 和 子目錄 模式都正常使用,但是,如果你選擇的是 子域名 模式,還需要找到:
1 |
server_name yourdomain.com; |
server_name yourdomain.com;
添加一個泛域名 *.yourdomain.com,如下:
1 |
server_name yourdomain.com *.yourdomain.com; |
server_name yourdomain.com *.yourdomain.com;
保存文件,然後重啟服務器:
1 |
/root/lnmp restart |
/root/lnmp restart
然後在你的域名管理那裡添加一條泛域名 *.yourdomain.com 解析到主機IP(或者分別解析你即將要使用的子域名到主機IP),這樣一來,創建子域名站點時,就可以正常訪問瞭。
附:以下是 Nginx 下最完整的多站點配置代碼,實際使用時,請根據自己的實際修改域名及網站目錄,同時建議刪除含有中文的行:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 |
# 根據自己的實際修改下面的域名 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; } |
# 根據自己的實際修改下面的域名
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;
}
修改固定鏈接結構
主站點
這裡說的主站的,默認就是最初安裝時的主域名,比如 yourdomain.com
如果是 子域名 模式,你可以直接在這個主站的的 設置 > 固定鏈接 直接修改即可。
如果是 子目錄 模式,主站點的文章都自動在鏈接中添加瞭 /blog/,如果你直接在這個子目錄站點的 設置 > 固定鏈接 設置結構,是無法去除 /blog/ 的,而且在 lnmp 環境下,直接修改會自動添加 index.php。
解決辦法是,訪問 所有站點,點擊主站點的編輯:
切換到“設置”標簽,找到 Permalink Structure ,在這裡直接填寫 固定鏈接結構(比如 /%postname%.html),保存即可。這樣就可以去除 /bolg/ ,同時不會添加 index.php,非常完美。
子站點
子站點直接在這個站點的後臺 設置 > 固定鏈接 那裡設置即可。
到這裡,一切基本的設置都完成啦!
閱讀該系列的其他文章: 下一篇:添加/移除 WordPress 多站點網絡的默認頁面