2013-09-28 10:50:01
来 源
itjs.cn
Nginx
本文介绍Nginx服务器下子目录中的网站程序如何设置伪静态,希望对于初学Nginx服务器相关的朋友有帮助,更多Nginx安装、配置、报错处理等资源请本站内搜索。。

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

问题源起:比如我想在站点下的/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了。

声明: 此文观点不代表本站立场;转载须要保留原文链接;版权疑问请联系我们。