Lighttpd下Wordpress的Rewrite规则

2015-02-11 14:00:12    2015-02-11 15:57:29

如果你是把Wordpress从Apache换到Lighttpd下的话,会发现原先wordpress用的.htaccess文件里的Rewrite规则失效了,这是因为lighttpd并不直接支持用.htaccess里的rewrite规则,所以需要做相应的修改才行。

Wordpress配置文件

如果你是按照我前面的方法配置虚拟主机建立网站的话,只要在网站的配置文件下增加几行,变成:

$HTTP["host"] =~ "(^|.)il8g.com$" {
        server.document-root = "/var/www/il8g"
        accesslog.filename = "/var/log/lighttpd/il8g.log"
        server.error-handler-404 = "/e404.php"
        url.rewrite-once = (
            # 有些wordpress自带的目录不需要rewrite
           "^/(wp-admin|wp-includes|wp-content|gallery2)/(.*)" => "$0",

           # 如果是根目录下的php文件,也不需要rewrite
           "^/(.*.php)" => "$0",

            # 其它的就转到index.php下来处理
           "^/(.*)$" => "/index.php/$1"
       )
}

保存设置文件后再重启lighttpd,就可以了

service lighttpd restart

更简单的配置文件

上面只是一个简单的如何用lighttpd来设置rewrite的例子,其实对于Wordpress来说,还有更简单的方法,就是把所有的404错误文件都转到index.php上来就行了。这样的话,只要把原先的设置最后一项404错误处理修改成index.php就行了,如下

$HTTP["host"] =~ "(^|.)il8g.com$" {
        server.document-root = "/var/www/il8g"
        accesslog.filename = "/var/log/lighttpd/il8g.log"
        server.error-handler-404 = "/index.php"
}

再重启lighttpd,应该就可以了。

有可能的模板问题

如果这时候还是不行,那可能是你用的wordpress模板的404文件并没有设置发送404错误的机制,只要修改模板的404.php文件(在Appearance->Editor下面选择404 Template/404.php),在这个文件的最开始的地方加上下面这一行就行了

<?php header("Status: 404 Not Found"); ?>