WordPress多站点模式 在Nginx下的rewrite配置方法

WordPress多站点模式 在Nginx下的rewrite配置方法

最近在把很多应用从Apache转入Nginx下,遇到最棘手的问题莫过于两个平台下rewrite规则的重新调整,下面就拿WordPress为例,和大家分享一下WordPress在多站点模式下,如何配置Nginx中的rewrite规则。

我们在开启WordPress(版本:3.2.1)多站点模式的过程中,会提示我们将一段rewrite写入.htaccess文件中,如下:

RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ – [L]

# uploaded files
RewriteRule ^([_0-9a-zA-Z-]+/)?files/(.+) wp-includes/ms-files.php?file=$2 [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).*) $1 [L]
RewriteRule  ^[_0-9a-zA-Z-]+/(.*\.php)$ $1 [L]
RewriteRule . index.php [L]

上面这些规则是应用于Apache的,到了Nginx下是行不通的,我们需要对规则进行一些调整。开始,我从网上找了很多案例进行尝试,没有一个能够正常运行,于是经过一番摸索后,写出了下面的规则,WordPress多站点模式在这套规则下可以正常运行。

下面是我调整后的Nginx下rewrite规则:

location ~ /[_0-9a-zA-Z-]+/wp-admin/$ {
rewrite ^/[_0-9a-zA-Z-]+/wp-admin/$ /wp-admin/ break;
}
location ~ /[_0-9a-zA-Z-]+/wp-([a-zA-Z-])*\.php {
rewrite ^/[_0-9a-zA-Z-]+/(.*\.php) /$1 last;
}
location ~ /[_0-9a-zA-Z-]+/wp-(admin|content|includes).* {
rewrite ^/[_0-9a-zA-Z-]+/(wp-(admin|content|includes).*) /$1;
}
location / {
if (-f $request_filename) {
break;
}
if (!-e $request_filename) {
rewrite . /index.php last;
}
}


3,571 Views