步入正题,有关301重定向的问题,网上一大堆,大都是差不多的文章,可以参考百度百科,也可以参考月光的301重定向的实现方法

资料基本上都是讲apache, ASP, PHP, JavaScript等实现301重定向的方法的,因为我才把apache换成lighttpd,所以需要有关Lighttpd的相关资料。又因为中文的Lighttpd资料太少,使用的相对也少一些,英文资料也是很简洁,只好自己摸索。

我的要求是,不仅是首页url的重定向,整个网站里第一个url都要能重定向到对应的页面上,而不会出现404 page not found。而事实上,网上教你301重定向的方法的,基本上都是首页的重定向,所以这个对我来说没有意义。关http1.1状态的知识,可以参考:18禁“网页”HTTP 1.1状态代码及其含义

几种301重定向实现方法的利弊:

ASP: 几百年前我就不用了,想用也用不了。

PHP:简单,但是它只能实现文件的跳转,目录就不行了,放弃。

JavaScript:简单,但会被搜索引擎惩罚,放弃。

DNS:这个就是转发了,只能定向首页,无用。

Apache:这个我向青蛙同志借了一个Apcahe的空间亲自实验过,可以用而且很完美,规则就一句:

RedirectMatch permanent ^/(.*)$ http://www.newdomain.com/$1

直接把这句话放网站根目录下的.htaccess里就行了。

以上所有方法都不能满足我的要求,而且我不想换回apache,只能去探索Lighttpd的方法了。还好,没多会就找到了,也是一句话:

$HTTP["host"] == “www.olddomain.com” {
url.redirect = (
“^/(.*)” => “http://www.newdomain.com/$1″,
)
}

好了,关键是这句话放在什么地方,Lighttpd是没有.htaccess文件的,只能放在/etc/lighttpd/lighttpd.conf里面。这时候要注意,如果你的lighttpd.conf里面有rewrite规则的话,有可能不成功,要把上面的redirect规则放在这个文件的最前面。保存文件后在终端重启Lighttpd:service lighttpd restart.

由于我的VPS用的是Kloxo(LXadmin的前身)面版,把这个放在lighttpd.conf里面是无用的,这一点折腾了我好几天的时间,正赶上人家过圣诞节放假,求助无果。仔细阅读了lighttpd.conf,在最后面发现有这样一句:include “conf/kloxo/kloxo.conf”,才发现原来Kloxo的301重定向规则是放在/etc/lighttpd/conf/kloxo/lighttpd.yourdomain.com这个文件里的。删除里面所有内容,放入上面那个规则,重启Lighttpd服务,使用Check Server Headers Tool – HTTP Status Codes Checker检查,一切OK,所有URL都301重定向到了相对应的页面,没有一个404产生。

为了能够更好的使网站在301重定向过程中不受搜索引擎的惩罚,建议参考一下Google网站管理员中心的几篇文章:

301 重定向

迁移网站