处理wordpress在nginx上500错误一例

在nginx上做wordpress博客,如果你使用了wordpress自带的固定连接功能,那一定会涉及到修改rewrite的地方, 因为wordpress默认是修改仅apache支持的.htaccess的规则. 如果是nginx用户,通常会在conf/nginx.conf内添加如下:

location / {
        index index.html index.php;
        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;
        }
    }

如果没有安装super-cache的话是没有问题的,安装了的话就需要手动将超级擦车生成的rewrite转化成nginx适用的,前面也介绍过相关方法

http://notech.net/193.cc 今天碰到了500错误,表现在一次登录后台的操作时错误跳转,按理来说错误的URL会到404页面,但是上述的rewrite规则会转到index.php,接受不到相关参数就会500错误. 在贵哥的协助下找到了解决方法:修改nginx.conf

rewrite ^/category/(.*)$ /index.php last;
rewrite (\d*).cc$ /index.php last;
if (!-e $request_filename){
rewrite (.*) /9999.cc last;
}

这里的规则只是用于我的固定连接格式,即%post_id%.cc,如果是其他格式的话做相应修改即可 附带wp-super-cache规则一个

location /blog/ {
    if (-f $request_filename) {
        break;
    }
    set $supercache_file '';
    set $supercache_uri $request_uri;
    if ($request_method = POST) {
        set $supercache_uri '';
    }
    if ($query_string) {
        set $supercache_uri '';
    }
    if ($http_cookie ~* "comment_author_|wordpress|wp-postpass_" ) {
        set $supercache_uri '';
    }
    if ($supercache_uri ~ ^(.+)$) {
        set $supercache_file /blog/wp-content/cache/supercache/$http_host/$1index.html;
    }
    if (-f $document_root$supercache_file) {
        rewrite ^(.*)$ $supercache_file break;
    }
    if (!-e $request_filename) {
        rewrite . /blog/index.php last;
    }
}