LBS to WordPress2.1 完美攻略 – 姿态永恒

转载请保留链接:http://www.awflasher.com/blog/archives/670

刚刚发现,由于之前新网的DNS被黑,我临时更换了DNS解析服务器,而后来这件事情逐渐被我遗忘,导致各大结点似乎还Cache了老的DNS解析服务器,因此,时而解析到老的LBS,时而解析到新的WordPress。今天终于发现问题并解决了。现在应该“全球同步了”。看到许多朋友留言或发信件询问ASP系统到WordPress的转换,我想写一篇文章来与大家分享。我并不想按照传统的“攻略”的方法来记录第一部该干什么,第二部该干什么,而是按照“流水账”的形式记录,我一步一步是如何走过来的。这肯定会花费你更多的阅读时间,但我肯定这种“讲故事”的方式能让你更能透彻地体会到其中的乐趣。毕竟,我不是所谓的专栏作家。当然,最后会有一个概要总结。

Update @ 07.02.13
不知道等全球DNS同步到这里还有多久,但我确实已经激动万分。这次转换的同时,公司也在与国内包括央视、湖南卫视、北京电视台在内的多家大型电视台合作,我非常荣幸能够参与平台相关部分的开发,但同时Blog的转换不得不等到我彻底腾出业余时间来进行。总的来说,转换还是非常顺利的,不但“优雅”地完成了站内连接的URL正则替换(即批量把我自己的文章中对自己网站内部连接地址按照WP的格式重写),而且也设计了一套属于自己的WP皮肤(当然,基于huddletogether的架构,我懒得自己写一堆DOM了)命名为“The Enhancing Spring (TES) ”。我把Blog的标题换成了“姿态永恒”,也算是表明了自己对这个Blog的态度将更加认真、积极,保证每一篇文章内容的真实、充实和质量。

Update @ 07.02.09
仔细看看这篇文章,就知道为什么我迟迟没有转换了。如今数据库、内部链接正则已经全部搞定,CSS也基本搞定。预计下周一就能正视上线了(需要部署、调试)。
这次转换得到了各界朋友的帮助,也受益匪浅,转换的具体细节和心得我也全部公布在后,转换内容除了Zola的传统转换外,我修补了老米甲的tag补丁和html编辑补丁两个老大难问题。如果您觉得此文对您有益,欢迎转载,请保留出处 – http://www.awflasher.com/blog/

Update @ 07.01.23
One Jump从去年9月份到今年,似乎我显得有些扭捏。其实不然,去年9月到现在,我从对DIV+CSS、JS、PHP+Mysql一无所知的只懂Flash里面几个简单function的小菜鸟,变成了一只老鸟。已经很不容易了。呃……WordPress的结构由于我本身特别不习惯,所以一直不敢轻举妄动,哪怕我把database都搞定了,还有两个大难题:1、UI(CSS);2、URL Rewrite(之前的残留链接统统要过来)
今天在yskin的帮助下,找到了一个很好的东西:K2皮肤。我想不久我的CSS也可以准备Ready了。

以下是数据库转换心得:@07.01.06
去年9月份就转好过数据库,但一直没有时间研究具体的问题、隐患。今天突然发现SiC更新了日志,追加了关于LBS2.0的一些消息,纵然SiC的原话还是“遥遥无期”。我仍然觉得有些许伤感。哪怕LBS只是SiC当年自己的玩物,但对我来说,这套LBS系统我太熟悉太熟悉了。使用了近两年,而且为我自己的系统做了太多的改进、优化
“舍不得,舍不得,有舍才有得”……祝福SiC和他的LBS,我仍然在努力想办法把老米甲提供的Tags挽救回来。所以近期肯定不可能看到我的新WordPress Blog上线。怎么说呢,有一些PageRank我仍然割舍不下。

OK,用http://www.neato.co.nz/ultimate-tag-warrior/ 插件,发现新建立了三个tags表,估计有希望把tags拿下~

OK.2007年1月6号,我终于搞定了。

一米六二师兄的鼎力支援以及Zuola提供的转换工具的帮助下,我已经优雅地完成了数据库转换。下一步就是部署了。
这里记录一下转换关键步骤以及可能遇到的麻烦。


1、配置工作环境(PHP+Mysql),下载转换程序(点此下载)以及自己LBS的Access数据库。
2、按照转换程序的说明配置Access数据库路径,并执行转换程序,输出SQL文件
3、将SQL文件用Emeditor打开并以UTF-8格式保存
4、不要用PHPMyAdmin导入。这个导入除了要麻烦你去修改该死的PHP配置文件之外,还可能对WordPress2.0.5以上的版本造成乱码Bug。
5、使用mysql命令行,source调用你的SQL文件。注意路径要写成”e:/1.sql”这种语法。
6、安装 UltimateTagWarrior 插件
7、注意WP的UTW中的Tag表是否清空。
8、使用我提供的tag转换程序生成所有的tags、映射关系表的sql文件
9、重复步骤5

补充:
1、我的转换程序自己改了表前缀为”aw_”,一般来说wordpress的为”wp_”,如果你想用,请自行替换。
2、原来sunu没有转用户表,我补充上去了,但由于无法较好的移植密码,因此一定要注意用户表必须一次转成,否则每次都回往后追加记录,没办法,因为我的SQL语句还停留在入门水平。我只转换了记录了Email的用户,由于用户量有1400,而且80%用户是非活跃用户,于是只能舍弃了。
3、所有的URL Rewrite必须在激活Permalink的情况下进行。

备忘:
WP的UTW中的Tag表逻辑:
与tags有关的三个新表
1、post2tag 关系映射表
2、tags 标签表
3、tag_synonyms tags同义表(目前不是很清楚具体作用)

LBS的Tags表逻辑:
1、blog_Tags表
2、blog_Article表

tags映射已经完成!受不了VBS了,用JScript写的,源代码下载地址
>_<很无奈发现UTW给postmeta表写了N多数据……似乎除了post2tag之外,这些数据也描述了tag与post之间的关系,我真不知道怎么回事,已经去官方论坛打探了……
http://www.neato.co.nz/forum/
附:针对wp2.1发表评论后Tag消失的补丁:
http://moeffju.net/blog/2006/12/25/wordpress-21-alpha3-utw/

patch:
1、注意老的LBS的结构,尤其是Author的a标签的迁移
2、评论的ajax检测继续做

patch2:
PR挽救方案-
一、增加LBS重写模块,并设置httpd的AddType解析asp文档为php文档。
冲定向模块主要针对id与tag两种requeryString做redirect,注意要做301重定向,详细内容见后。

需要挽救的PR页面包扩(不分先后)
1) /blog/article.asp -> About
2) /blog/gbook.asp -> About
3) /blog/user.asp -> About
4) /blog/trackback.asp -> About
5) /blog/default.asp -> Index
6) /blog/defaultcv.asp -> Index
6) /blog/defaultcc.asp -> Index
7) /blog/tags.asp -> TagsClouds
8) /blog/comment.asp -> RecentComments(Depend on Plug-ins)
9) /blog/feed.asp -> FeedBurner -_-#~

可以参考的映射PHP方式:
在WordPress的Index.php下加入配置文件,建立一个配置数组,对于各种querystring都能映射到相应的URL。

$lbsmapping = array(
‘id’ => ‘archives/’,
‘tag’ => ‘tag/’
);
require_once(‘./lbs-wp.php’);

核心是lbs-wp.php

<?php
foreach ($lbsmapping as $key => $value)
{
if(isset($_GET[$key]))
{
header(‘HTTP/1.1 301 Moved Permanently’);
header(‘Status: 301 Moved Permanently’);
header (“Location: http://&#8221;.$_SERVER[‘HTTP_HOST’$]$. rtrim(dirname($_SERVER[‘PHP_SELF’]), ‘/\’).”/”.$value.$_GET[$key]);
exit;
}
}
?>

二、对于从LBS Export出来的SQL语句做批量URL替换,尤其对于原asp连接批量替换,减少站内PR损耗。推荐Emeditor。

三、查询Google Webmaster Tools的 Diagnostic下的Web crawl下的出错内容并从SQL文件中把相应的站内连接直接干掉。
“HTTP errors (4) | Not found (183) | URLs not followed (0) | URLs restricted by robots.txt (0) | URLs timed out (0) | Unreachable URLs (123)”

四、最快速度在WP下面启动sitemap。

五、有URI洁癖的话,考虑为postslug写入相应的值,恩……这个有点复杂……因为LBS的post都没有postslug 😦

六、外部连接只能Redirect,但是内部连接我们不能偷懒,针对内部连接的优化的EmEditor正则匹配,将内部连接全部转换为WP格式。
1 – 针对id到archives的rewrite映射

href=\”[^?]*?id=(d+)[^>]+>([^<]+)</a>
href=\”http://www.awflasher.com/blog/archives/1\” title=\”2\”>2</a>

2 – 针对tag到UTW的rewrite映射

href=\”[^?]*?tag=([^\]+)[^>]+>([^<]+)</a>
href=\”http://www.awflasher.com/blog/tag/1\” title=\”2\”>2</a>

六、SEO Solutions by Google WebMaster Help Center – 针对SEO的解决方案
My URL changed, so how can I get Google to index my new site?

While we can’t manually change your URL in our search results, there are steps you can take to make sure your transition is smooth.

First, you can redirect individuals to your new site. If your old URLs redirect to your new site using HTTP 301 (permanent) redirects, our crawler will discover the new URLs. For more information about 301 HTTP redirects, please see http://www.ietf.org/rfc/rfc2616.txt

Google listings are based in part on our ability to find you from links on other sites. To preserve your rank, you’ll want to tell others who link to you of your change of address. One way to find a sampling of sites that link to yours is to perform a link search. To learn how, please visit http://www.google.com/help/features.html#link. To obtain a comprehensive list of the links that point to your page, perform a Google search on your URL. On the results page, select the “Find web pages that contain the term” link, and Google will provide you with webpages that mention your address.

总结大致两点
1、做301重定向,这个我已经提供了解决思路(可以参考PHP手册)
2、改外部连接。其实内部连接同样重要,参见上面的正则匹配。

最终总结

  1. 下载原LBS系统的DataBase。
  2. 安装WordPress2.0.7,可以在WordPress官方网站下载
  3. 对于使用了老米甲的插件的LBS用户,若原文发表过html贴,则不需要再进行UBB匹配,这一点要注意。
  4. 使用上文提到的工具到处LBS的数据库为SQL文件,命名为maindb.sql,并确认编码为UTF8
  5. 对maindb.sql进行批量正则替换,把SQL文件中所有的内部连接进行URL替换,确保最小链接损失。(内部连接就是你以前文章中对自己blog下各类资源,如日志和tag的引用)
  6. 对于有Tags的用户(估计不多) ,按上文方式导出tag的SQL文件,命名为tag.sql,并确认编码为UTF8
  7. 先用mySQL的命令行方式,用“source”语句导入maindb.sql文件。注意,不要用PhpMyAdmin的导入!
  8. 安装UTW最新版,同第6步,导入tag.sql。
  9. 按上文,进行301重定向架构。
  10. 在本地全面检查blog系统,最好改一下host把原blog的Domain指向127.0.0.1,然后看看搜索引擎接入的重定向是否完美、优雅。
  11. 下载2.1并升级

LBS到此为止

LBS到此为止,但,这并不代表WP会接踵而至。为了监督自己抽出时间来把WP的事情落实,我必须下定不再发文的决心。其实我发现,在我决定放弃LBS的时候,我发文的欲望已经远远不如以前了。

数据库已经完成,剩下的CSS也在修整之中,URL Rewrite也已经询问了一米六二

我骨子里对任何属于我的东西都有一种极大的占有欲,但一旦我下定决心换掉的时候,它便一文不值。因为能让我下定决心放弃的,一定有它不可原谅的地方。不管我为改善自己的这个LBS付出过多少心血,我都要将它彻底放弃,从此LBS和我,将相隔两个世界。

放弃一个实体,但仍然要保留一种姿态。我花多少时间在LBS上,我就会花多少时间在WP上。知道,把它变成我想要的那种模式。

突然觉得,对我而言,爱情亦如此。我谈了四五场恋爱了,虽然我是那么地不愿意,但我身边的女人还在继续。

术语扫盲 – SP、CP、ISP、ICP、ASP

昨天和同事无意中聊到CP的概念,我乍一听有点儿蒙。不知道啥是CP。今天看到此文,原来CP就是ICP去掉一个Internet。看来很多角落需要扫盲了……

SP,Service Provider服务提供商的简称
CP,Content Provider的简称
这两个概念的区别是明显的,通常SP具有电信运营商接入通道,为用户提供服务,CP为SP提供内容,由于内容和服务结合紧密,实际上SP常常有自己的内容,CP也拥有自己的通道。这里对CP界定为SP服务的内容提供商,SP为拥有电信接入资源的服务提供商。
ISP的英文是Internet Service Provider,翻译为互联网服务提供商,即向广大用户综合提供互联网接入业务、信息业务、和增值业务的电信运营商。ISP是经国家主管部门批准的正式运营企业,享受国家法律保护。
ICP的英文是Internet Content Provider,翻译为互联网内容提供商,即向广大用户综合提供互联网信息业务和增值业务的电信运营商。ICP同样是经国家主管部门批准的正式运营企业,享受国家法律保护。国内知名ICP有新浪、搜狐、163、21CN等,河南省知名ICP有河南通信公司下属的河南信息港、商都信息港,以及17个地市信息港,等等。
ASP的英文是Application Service Provider,翻译为应用服务提供商,是为各种各样的商务客户和事务客户提供其所需的应用,并且这种应用通过托管或者租用的形式实现,而不是使用传统的购买方式或者用户定制开发的形式实现的,从而使客户的应用开发成本大幅度下降。
ASP并不是新的概念,实际是传统的专业外包服务在网上的延伸。撇开网站不谈,ASP实际是提供各种应用服务的专业公司,比如传统业务中的专业理财公司,建筑设计研究

院等专业服务,ASP只不过把这种服务搬到了网上,同时,由于ASP提供的服务具有专业化和适合网络的特点,而网络上传播的主要是数据和软件,因此,ASP的经营范围又大大超过了传统的专业外包业务,可以提供一切通用软件租赁或各类应用系统的定制。个人认为,上面提到的ASP就是RIA技术应用服务的一个平台。