最近在把很多应用从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]
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; } }
阳光部落原创,更多内容请访问 http://www.sunbloger.com/