LBS 转换 WordPress 全过程

转载请保留链接: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!

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

相关日志

楼被抢了 39 层了... 抢座Rss 2.0或者 Trackback

  • Black-Xstar

    哈哈
    我的沙发
    恭喜你加入wp大家庭

  • ruery

    这风格没有你之前的好看了..

  • 鬼仔

    @Black-Xstar 嘿嘿,加入了
    @ruery 现在的这个theme是简洁的类型,我喜欢这样的。 :)

  • 胡戈戈

    呵呵,不错,我订阅你的博客有段时间了,技术含量好高啊

  • 鬼仔

    嘿嘿,谢谢夸奖,也谢谢你的支持~
    以后要常来啊。

  • xiaoxiao

    恭喜。分享是最重要,估计这个日志的点击量会很高。

  • 鬼仔

    @xiaoxiao 我就是在转换过程中吃了点苦,所以把过程写下来,一是为了记录下,二是希望可以方便别的朋友。

  • woyigui

    不错。。终于转过来了。。。继续你的blog之旅!!

  • lonkil

    改成wp的了,不错,终于放弃了asp。

    还是上面那位朋友说的,风格虽然简单,不过没有以前的好看。

  • 鬼仔

    @lonkil 嘿嘿,慢慢习惯就好了,反正我是挺喜欢现在这个样子的。

  • 小菜

    的确是颇费一番周折。。
    喜欢你善于总结的习惯。

  • Boldness

    总体感觉很进步啊 呵呵 果然不是凡人 总结的很精辟

  • nt_family

    恭喜鬼仔转换成功,呵呵,我之前也有试过,不过XML会把隐藏的文章也转换了,我看看,太麻烦,就没有换,直接用WP做了另一个blog

  • aw

    终于来了。恩。

  • smias

    恭喜,俺最常来的就是你的BLOG.

    放点0day上来俺就更喜欢了。

  • 呵呵

    不错的恭喜下

  • amxku

    恭喜…
    BS…
    link加上target=”_blank”

  • 鬼仔

    @amxku 你是说哪里的链接?

  • xixi

    再次的曰你一下..

    速度不是很理想..

  • 鬼仔

    54楼上的,速度的确不如以前在师傅服务器上放着的时候了。

  • 老臧

    我说呢,咋变样了呢

  • badkid

    持续关注..

  • 可酷可乐

    以前的风格放出来吧。

  • 鬼仔

    @老臧 嘿嘿,程序都换了。
    @badkid 谢谢。
    @可酷可乐 等我想想我原来的程序都修改了哪些地方,然后整理下就发出来。

  • purple's姿色

    呵呵,凑个热闹!
    这个wordpress我用着还是不舒服! 就用过几天!

  • purple's姿色

    速度确实不是很好! wairi一下!

  • 鬼仔

    @purple 用习惯了就好了,速度不如以前。

  • xgo

    不错的东西,谢谢!

  • 鬼仔

    @xgo 不用这么客气,我自己记录下,同时也方便可能用到的朋友。

  • mak

    鬼仔,你QQ多少?有些问题请教一下!

  • caba

    看了不顶不厚道-楼主继续努力

  • 黯然销魂剑

    俺也想从LBS转WP,可惜俺技术严重不过关,又怕麻烦,所以还是放弃了。:(

  • 菠菜

    我在导入时,提示:DROP TABLE IF EXISTS `wp_categories` ;

    这是什么原因呢?请问博主。

  • 木木

    鬼仔为什么在isapi_write里写跳转article.asp?id=num 跳转到 archives/num.html不行呢,在.htaccess里我用过可以的.

  • 前端开发-子任

    各种折腾啊,呵呵

发表评论