转载请保留链接: http://huaidan.org/archives/1879.html

终于从LBS转到WordPress了,很早就想换WordPress了,原来也说过 "是否该放弃LBS? ",真的是犹豫了很长的时间,一方面是对LBS的感情以及一次次的失望,另一方面是WordPress的诱惑。同时也由于没有合适的空间,因此这个计划就暂时搁浅了,直到最近跟几个朋友一起合租了 (mt) Media Temple ,才下定决心要换了。

买空间的时候也费了不少力气,因为必须信用卡支付,我又没有信用卡,就借朋友的信用卡去买,当时订单填的我名字,信用卡名字又是朋友的,然后老外就给我邮件,说我的订单出了问题,必须要电话过去解决问题,不能通过邮件解决,这可把我难住了,我的蹩脚英语还从来没有跟老外交流过,无奈之下只有找朋友帮忙打电话,结果还是不行。最后还是通过邮件,告诉老外我的英文很烂,想知道我的订单是哪里出了问题之类的,然后向老外解释一番,最后终于解决了。

接下来就是转换数据了,这个过程真的是颇费周折,因为我的数据比较多,有1800多篇文章,再加上评论什么的,原来的LBS的数据库达到了14M多,当时想用 Wady 写的那个 转换程序 ,因为他是转成xml的,可以直接在在WordPress后台导入就行了,但是不知道是不是因为我的数据库太大,总是转换不成功。

最后只有用 Sunu 写的, Matt 修改过的那个,然后我又做了修改,其实也只是跟Wady写的那个综合了下,比如一些UBB标签的替换之类的。数据转换之后又要挽救原来的外链之类的,写rewrite又花了不少时间。

这次转换,我的blog也有了很多变化:

  • 主域名换成了 huaidan.org ,因为本来我的域名就够长的了,再加上www就更长了,而且这个域名我也不准备放其他东西,只是放blog,所以huaidan.org就足够了
  • blog目录由原来的/blog换到了根目录,以前需要输入 www.huaidan.org ,然后再点下链接或者直接输入 www.huaidan.org/blog 才能进到blog页面,有点繁琐,而且以前的首页也没放什么东西,毫无意义,现在则只需要输入huaidan.org就可以了
  • url也换成了WordPress的伪静态,我采取的是/archives/%post_id%.html的结构
  • 存在的缺点,以前是放在师傅的服务器上,在国内,宽带也很足,所以访问速度很快,我这里测试网通电信访问速度都不错,而现在放到了国外的服务器上,速度比以前慢了一些,而且WordPress本身的执行速度是比LBS要慢的,更多的功能是需要速度为代价的,希望大家能多多包涵
  • 评论方面比以前要好多了,以前用LBS的时候,一直都要忍受spam的痛苦,后来干脆把guest组的评论权限给取消了,需要注册登录后才能发表评论,还限制了评论中不能含有url,已经不只一位朋友跟我说发评论的时候辛辛苦苦打了很多,结果最后发不出去

不过我以前用的LBS没有tag,这次转到WordPress之后,我会慢慢给以前的文章加上tag,不过将近2000篇文章,很大的工作量。。

在所有数据都转换完之后,域名指过来之前,给我的LBS统计截了张图留念:

最后写一下自己的转换过程供大家参考:

  1. 本地搭建WordPress的运行环境(推荐 XAMPP 这个套件),mysql、php最好跟你将要迁移的服务器上的版本是一致的

  2. 下载 convert.asp ,然后将你的LBS数据库放到相同的目录下,然后更改数据库名或者convert.asp的25行,保证数据库名和convert.asp中的名字一致,然后在本地IIS或者你的blog上浏览convert.asp,按照提示将LBS数据库导出为LBS_DB_ALL.sql

  3. 将转换后的LBS_DB_ALL.sql用编辑器另存为UTF-8编码(这里编辑器用EmEditor,因为他的正则好用点,不过我还是喜欢EditPlus)

  4. 打开LBS_DB_ALL.sql,替换原LBS中的表情,替换规律如下,这个是我对比LBS和WordPress中的表情之后,尽量找匹配的来替换,双引号中的部分,注意空格,同时将其中的中文冒号替换为英文的:

    [smile] --->" :smile: "
    [confused] --->" :???: "
    [cool] --->" :cool: "
    [cry] --->" :cry: "
    [eek] --->" :eek: "
    [angry] --->" :evil: "
    [wink] --->" :wink: "
    [sweat] --->" :mad: "
    [lol] --->" :lol: "
    [stun] --->" :shock: "
    [razz] --->" :razz: "
    [redface] --->" :oops: "
    [rolleyes] --->" :roll: "
    [sad] --->" :sad: "
    [yes] --->" :!: "
    [question] --->" :?: "
    [heart] --->" :grin: "
    [star] --->" :arrow: "
    [music] --->" :mrgreen: "
    [idea] --->" :idea: "

    如果要替换后的表情生效,需要在转换完毕之后,在WordPress的后台---设置---撰写中将"自动将 :-) 和 :-P 等表情符号转换成图片显示"打开

  5. 替换LBS_DB_ALL.sql中的日期(不然导入mysql之后,文章和评论的发表时间都会是00:00,我这里是这样的),注意空格:

    " 上午 " ---> " "
    " 下午 " ---> " "

  6. 替换没有转换干净的UBB,因为我发现某条UBB分割开来放在LBS数据库blog_Article表中的log_content0和log_content1中的时候,转换之后就会出现问题,比如说[img]http://huaidan.org/1.gif[/img]这条,如果是 [img]http://huai放在了log_content0中,而dan.org/1.gif[/img]放在了log_content1中,那么转换之后就会变成[img]http://huai<!--more-->dan.org/1.gif[/img]这样的形式,只是在log_content0后加了 <!--more-->标签,那么我们需要用EmEditor中的正则替换以下部分:

    <code>(.*?)</code><!--more-->(.*?)\[\/code\]

    替换为:

    <!--more--><code>\1\2</code>\[img\]http(.*?)<!--more-->(.*?)\[\/img\]

    替换为
    <img src=\\\"http\1\2\\\" />[email这部分我是手动替换的,因为我这里只有两个[b]替换为<b>
    [/b]--------</b> 这两个标签主要是评论中的没有被转换

    \[file=(.*?)<!--more-->(.*?)\](.*?)\[\/file\]

    替换为

    <a href=\\\"\1\2\\\" target=\\\"_blank\\\">\3</a>

    \[\*\](.*?)<br />
    替换为
    <li>\1</li>

    [*]替换为<li>

    [/list]替换为</ul>

    \[url=(.*?)<!--more-->(.*?)\](.*?)\[\/url\]

    替换为:

    <a href=\\\"\1\2\\\" target=\\\"_blank\\\">\3</a>

  7. 挽救内链,这个正则我写不好,所以就用了 aw 的正则,再加上我自己的笨方法来达到目的,LBS_DB_ALL.sql中按下面方法替换
    http://huaidan.org/blog/article.asp?id=
    http://www.huaidan.org/blog/article.asp?id=
    替换为:

    http://www.huaidan.org/blog/article.asp?guizaid=

    然后正则:

    href=\\\"[^\?]*\?guizaid=(\d+)[^>]+>([^<]+)<\/a>

    替换为

    href=\\\"http\:\/\/huaidan\.org\/archives\/\1\.html\\" title=\\"\2\\">\2</a>

  8. 挽救原来LBS下上传的文件链接地址,将原来LBS的uploads目录上传到WordPress的wp-content目录下,然后LBS_DB_ALL.sql中
    "uploads/200
    替换为
    "http://huaidan.org/wp-content/uploads/200

  9. 本地安装wordpress 2.0.7, 这里 可以下载

  10. 在phpmyadmin中把连接校对改为utf8_general_ci,然后新建WordPress数据库,编码为utf8_general_ci

  11. 在phpmyadmin中导入LBS_DB_ALL.sql,导入时选择UTF-8

  12. 这时你会发现WordPress的数据库中所有的中文都是乱码,先不要管他,直接用wordpress 2.5替换,然后访问wp-admin/upgrade.php进行升级

  13. OK,现在就基本完成了,这时blog名会变成乱码,那么修改下blog名

  14. 友情链接,因为WordPress的友情链接导入只支持OPML的格式,因为我是把原来LBS中的友情连接保存成html文件,然后导入到FireFox中,用 OPML Support 导出成OPML文件,再导入到WordPress的友情链接中

  15. 挽救外链,主要是default.asp和article.asp两个页面,default.asp还好办点,但是article.asp中带查询,例如需要让 http://www.huaidan.org/blog/article.asp?id=1879 跳转到 http://huaidan.org/archives/1879.html ,让我google {QUERY_STRING}了好长时间才找到解决办法,光写rewrite就花了我一个下午的时间,直接贴出来我的.htaccess内容给大家做个参考:

    RewriteEngine On
    RewriteBase /

    #blog/article.asp?id=num 跳转到 archives/num.html
    RewriteCond %{QUERY_STRING} ^id=([0-9]+)$
    RewriteRule ^(.*)$ archives/%1.html? [R=301,L]

    # 去除www
    RewriteCond %{HTTP_HOST} ^(www\.huaidan\.org)(:80)? [NC]
    RewriteRule ^(.*) http://huaidan.org/$1 [R=301,L]

    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule . /index.php [L]

    # 防止盗链
    RewriteCond %{HTTP_REFERER} !^$ [NC]
    RewriteCond %{HTTP_REFERER} !zhuaxia\.com [NC]
    RewriteCond %{HTTP_REFERER} !xianguo\.com [NC]
    RewriteCond %{HTTP_REFERER} !google\.com [NC]
    RewriteCond %{HTTP_REFERER} !bloglines\.com [NC]
    RewriteCond %{HTTP_REFERER} !feedburner\.com [NC]
    RewriteCond %{HTTP_REFERER} !feedsky\.com [NC]
    RewriteCond %{HTTP_REFERER} !huaidan\.org [NC]
    RewriteRule .*\.(gif|jpg|png|js|css|rar|zip|exe|mp3|swf|css|js|mpg|mpeg|wmv|rm)$ - [F]

    Redirect permanent /blog/feed.asp http://feed.huaidan.org
    Redirect permanent /blog/default.asp http://huaidan.org
    Redirect permanent /blog http://huaidan.org

    # 停示显示目录列表
    Options -Indexes

    注意.htaccess的规则是有顺序的。

  16. 大概就这些了,OVER!

写完之后一看很长,也懒得检查有没有语法错误或者错别字了,大家如果发现有问题的地方直接在下面评论,我会进行修改。