网上也有不少人有这个问题,但没有找到答案。自己摸索解决了。
问题源起:比如我想在站点下的/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了。