/ 中存储网

Nginx服务器下子目录中的网站程序如何设置伪静态

2013-09-28 10:50:01 来源:itjs.cn

网上也有不少人有这个问题,但没有找到答案。自己摸索解决了。

问题源起:比如我想在站点下的/blog用wordpress建一个博客,不绑定域名的,想通过http://www.yuming.com/blog来访问。然后在wordpress后台设置固定链接,结果访问固定链接错误。

分析为伪静态设置的问题。wordpress在nginx通用的伪静态规则为:

location / {

rewrite ^/wp-admin$ /wp-admin/ permanent;

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建的。

错误解决方法:试图在 location /blog 应用rewrite规则

location /blog {

rewrite ^/wp-admin$ /wp-admin/ permanent;

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;

}

这样不起作用。原因是rewrite规则不能写在这里。(网上原话。更具体的原因我也不清楚。)

经过摸索,解决方法其实很简单:

location / {

rewrite ^/blog/wp-admin$ /blog/wp-admin/ permanent;

if (-f $request_filename/index.html){

rewrite ^/blog/(.*) /blog/$1/index.html break;

}

if (-f $request_filename/index.php){

rewrite ^/blog/(.*) /blog/$1/index.php;

}

if (!-f $request_filename){

rewrite ^/blog/(.*) /blog/index.php;

}

}

就OK了。