因为需要帮staff迁移一些数据, 所以想到了使用wordpress的多站点. 这个功能在wordpress3.0后就有了.
软件系统等信息: OS: linux debian wheezy
php:5.4.4-14
mysql:5.5.37
server:nginx1.2.1 /apache 2.2.2
首先下载wordpress3.9, 安装的时候, 需要注意一下 我的www目录是/home/www, 所在把wordpress的路径是 /home/www/wordpress
我的nginx默认没有配置任何东西, 所以直接浏览器输入
127.0.0.1/wordpress/wp-admin/install.php 就可以安装了. 但是这里不能这样, 因为多站点基于localhost的nginx rewrite是无效的, 所以这里我们需要先配置nginx的虚拟主机.
在debian里面, nginx的配置文件是/etc/nginx/nginx.conf 来管理全局的. 在/etc/nginx/site-available 和/etc/nginx/conf.d 是用来管理虚拟主机的
这里我们新建一个叫wp的文件 在/etc/nginx/site-available/wp
#touch /etc/nginx/site-available/wp
加入下面的内容, 注意这里我们是实用的基于域名的.
{
listen 80;
server_name wp.com www.wp.com *.wp.com;
charset utf-8;
index index.html index.htm index.php;
root /home/www/wordpress;
location / {
autoindex on;
autoindex_exact_size on;
autoindex_localtime on;
index index.php index.html;
if (!-f $request_filename) {
rewrite ^(.*)$ /index.php?_rp_=$1 last;
break;
}
}
location ~ .*\.(git|jpg|jpeg|png|bmp|swf)$ {
expires 1d;
}
location ~ .*\.(js|css)?$ {
expires 12h;
}
location ~ \.php$ {
fastcgi_pass unix:/var/run/php5-fpm.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /home/www/wordpress$fastcgi_script_name;
include fastcgi_params;
}
location /doc/ {
alias /usr/share/doc/;
autoindex on;
allow 127.0.0.1;
allow ::1;
deny all;
}
}
然后因为是本地测试, 所以需要修改上面的server name的hosts
#vim /etc/hosts
增加下面一行在hosts里面
127.0.0.1 *.wp.com www.wp.com wp.com
#nginx -t 测试通过然后重加载
#/etc/init.d/nginx reload
现在用wp.com 就可以访问初始的wordpress安装界面了
附上子域名和子目录的apache配置
define('SUBDOMAIN_INSTALL', false); false是子目录, true是子域名 (子目录访问是通过http://xxx.com/站点2 站点来的, 子域名是通过http://站点2.www.com来访问的)
子域名的
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]