2006年1月6日星期五

从Movable Type迁移到WordPress的方法

  Movable Type和WordPress是世界上使用最多的两个Blog系统,两者的功能都非常强大,使用起来各有千秋,当然,两者的区别也是非常大的。

  Movable Type是PERL写的,CGI从原理上来说占用CPU资源可能会多一些,Movable Type生成真正的静态Html文件,其Url对搜索引擎很友好,静态HTML文件消耗系统资源则较少,可以支持非常庞大的访问量。可惜正是因为生成静态HTML文件,导致Movable Type发布日志的时候速度较慢,每发布一篇文章要更新好几个页面,另外Movable Type的安装相当复杂,上手较为困难。

  WordPress是PHP写的,几乎恰恰和Movable Type相反,安装非常简单迅速,几乎5分钟内就可以完全装好,上手很容易,WordPress不生成静态Html文件,所有日志都保存在数据库中,因此其发布日志速度比Movable Type快,但是由于是动态页面,默认配置下对搜索引擎并不友好,不过通过UrlWrite可以仿真静态Html文件,来达到以假乱真的程度,再者其引入了高效的Cache功能,对于大数据量的访问支持也变得越来越好了。

  由于WordPress一直都是免费的,多用户版本也是免费,而Movable Type似乎整体正在向收费转移,因此将个人博客系统从Movable Type迁移到WordPresss上似乎越来越流行。我这里总结了若干数据转换的方法,供参考。

  首先,利用Movable Type的导出功能将日志都导出到一个文本文件。

  然后,对WordPresss进行一些配置。

  由于先前的Movable Type日志已经被Google等搜索引擎索引了,所以我们可以强行将WordPresss的Url使用Movable Type的Permalink结构。即从外部看两者具有相同的Url,不会损失搜索引擎的访问量。在WordPresss中点Permalinks设置为/archives/%year%/%monthnum%/%postname%.html,因为%postname%在WordPresss中,是使用“-”号来代替空格,而Movable Type使用的是“_”号,因此,需要在WordPresss安装一个“Underscore Permalinks Plugin”插件。

  这个插件很简单,先建立一个文件为underscorepermalinks.php,内容如下:

/*
Plugin Name: Underscore Permalinks
Plugin URI: http://wordpress.org/#.
Description: Converts spaces to underscores when sanitizing post titles for use in permalinks.  This is handy for those moving from Movable Type who want to maintain their old permalink style.
Version: 1.0.1
Author: Ryan Boren
Author URI: http://boren.nu/
*/
function sanitize_title_with_underscores($title) {
$title = strtolower($title);
$title = preg_replace('/&.+?;/', '', $title); // kill entities
$title = preg_replace('/[^a-z0-9 _-]/', '', $title);
$title = preg_replace('/s+/', ' ', $title);
$title = str_replace(' ', '_', $title);
$title = preg_replace('|_+|', '_', $title);
return $title;
}
remove_action('sanitize_title', 'sanitize_title_with_dashes');
add_action('sanitize_title', 'sanitize_title_with_underscores');

  然后复制到plugins目录下Activate。

  现在,就可以在WordPress中导入Movable Type的日志了。导入后,在WordPresss中的Url将和Movable Type里的完全一样,实现了平滑的迁移。

  注意WordPresss的主机需要支持UrlRewrite才可以使用上述方法,否则Permalink将无效。