告别BO-BLOG,转成了WordPress

今天非常成功的将BO-BLOG转换成WordPress,我很早就想转成WordPress,但是我看了周围的一些博友转换的并不是很成功,多多少少都有数据丢失,我这次从BO-BLOG转换成WordPress,可以是非常的成功。

BO-BLOG转换成WordPress程序2010下载地址:

http://u.115.com/file/f47f52f18f

但是我服务器的php不是最新版本,所以wordpress不能更新到最新版。郁闷。
bo-blog to wordpress转换的后续问题
  由于我的网赚日记已经被搜索引擎收录了一些文章,目前的流量也大多数靠搜索引擎,而转换之后肯定会对收录有很大的影响,所以做好后续工作是十分必要的,否则一旦被K,不知道什么时候才能回得来。解决收录问题最好的办法是做301转向,我在网上找了两种方法,一种是编写php代码,一种则是使用.htaccess,节选如下,以备后用:
  .htaccess法  1、更换博客主目录
  从原来Bo-Blog 的www.ZFreet.com/blog/换到了现在的www.ZFreet.com/根目录,这点对SEO 的影响其实不大。
  2、Bo-Blog 的别名URL 结构
  当我自定义了日志链接的别名时,Bo-Blog 的URL结构是这样的:www.ZFreet.com/blog/post/XXX.php;我现在的WordPress 用的别名URL结构为www.ZFreet.com/post/XXX.html,尽可能的,我不改动别名(XXX 部分),但是Bo-Blog 的URL要区分大小写,而WordPress 不分;搜索引擎也是会区别大小写的。
  3、Bo-Blog 的伪静态默认URL 结构
  如果没有定义链接别名,Bo-Blog 默认的URL结构是这样的:www.ZFreet.com/blog/post/read.php/ID.htm,以ID号自动生成htm 文件;现在的WordPress每篇日志都有别名,不存在ID号的情况。但是,要让原来的ID号自动对应到现在的别名URL,是几乎不可能的事情,所以在写301的时候,就只有手动对应了,这个比较麻烦。
  4、Tags 的URL 结构
  Bo-Blog 的Tags 是:www.ZFreet.com/blog/go.php/tags/XXX/,直接是目录形式;WordPress 的是:www.ZFreet.com/post/tag/XXX/。不要小看这个东西,个别比较新鲜的Tags 也会成为访问入口,这个结构比较一致,容易转换。
在这次搬家过程中,301重定向要尽量满足上面的四点,才能尽可能的保住搜索流量,为此,我在.htaccess 文件里这样写道:
  
# ID
  RewriteRule ^blog/read.php/8.htm /post/repair-new-notepad.html [R=301]
  # Post
  RewriteRule ^blog/post/(\w*).php$ /post/$1.html [R=301]
  RewriteRule ^blog/read.php/(\w*).htm$ /post/$1.html [R=301]
  # Tags
  RewriteRule ^blog/go.php/tags/(\w*)/ /post/tag/$1 [R=301]
  # Feed
  RewriteRule ^blog/feed.php /feed [R=301]
  # Links
  RewriteRule ^blog/ / [R=301]

  其中的#ID 就对应到上面的第3点,得手动转换日志,然后把每一篇的别名都写一条301,幸好只转了少许的几篇,工程量还不算太浩大。
  在用了上面的301条件后,搜索引擎并不能全部保留住原来Bo-Blog 里的内容,因为很多链接都空了,会跳到404,所以那些没有手动转换的日志,会陆续的消失。
  写了301 的则会保留,依然是原来Bo-Blog 的结构,会自动跳到现在对应的日志,对访问者没有任何影响,不过排名会下降。当  我发现某篇写了301的日志无法带来搜索流量时,我就会撤掉那条301,让它们自生自灭。
  现在回看,301重定向的效果基本达到了我的需求,让想留的东西能留住(比如,但还是旧的URL),不需要的东西慢慢消失。等后面继续的逐步稳定后,我会试图删除原来所有旧的带blog/ 的抓取结果,估计完全达到平滑转换的效果,需要至少一年的时间。
  php法

  1、RSS Feed:feed.php
  对现代网民来说,RSS阅读器已经是看网页的必备工具,因此RSS种子的地址几乎是众多网址中最重要的一个。
  2、如果你懒得换也行,反正我已经重定向了。
  Bo-Blog的feed.php文件在不带参数的时候是博客正文的RSS,带参数go的时候可能是评论,也可能是分类目录的RSS,因此需要在WP根目录下建一个feed.php文件,里面对参数作简单的判断,把原来的RSS重定向到WP的RSS中。以下代码只是本博客的转向,具体怎么写要根据具体搬家结果分析。
  我的博客搬家过程中,分类数字2不知为何被搬家程序略过了,因此当分类数字为2的时候特殊处理,否则从原来的go参数中提取分类数字,传给WP的cat参数。
<!–p<br–>header(“HTTP/1.1 301 Moved Permanently”);

  2、博客阅读页面:read.php
  由于在Bo-Blog系统中我使用了链接地址优化(Rewrite),而搜索引擎收录的既有优化地址,也有动态地址,因此要判断一下地址究竟是哪种类型,然后把参数提取出来,传给WP。含有htm的地址是优化的地址,从中提取.htm之前的数字传给WP的p参数就可以到新的页面地址了。
  英文博客搬家过程中,日志的数字ID和新系统对不上,那些ID>2的日志都被+=1了,所以中间对英文日志ID作了特殊处理。变量$prefix用来判断是中文还是英文站。
<!–p<br–>header(“HTTP/1.1 301 Moved Permanently”);

  3、标签页面:tag.php
  我觉得如果没有标签的话,这世上的网页会减少一半。用site:命令在Google中一看就知道,一个小破站,却有几千个页面被搜索引擎收录,而真正的日志不过上百篇而已,那多出来的页面几乎都是各种导航页面,其中就包括标签导航。鉴于标签这么重要,原来的tag.php自然要加上、改写一下了。
  在我原来的系统中,由于标签是空格分隔,导致我只好以下划线_把一些英文字句连起来,现在WP中是以逗号分隔,而且标签有别名(空格被替换为-),因此原来的标签中,下划线要被替换为-,所以用到了str_replace()函数。在重定向之前要严重注意tag参数已经被解码了,因此需要重新编码!(即:urlencode())
<!–p<br–>header(“HTTP/1.1 301 Moved Permanently”);
if(!isset($_REQUEST["tag"])){
header(“Location:http://$_SERVER[HTTP_HOST]/cn/“);
} else {
header(“Location:http://$_SERVER[HTTP_HOST]/cn/?tag=” .
urlencode(str_replace(‘_’,'-’,$_REQUEST["tag"])));
}
?>

  4、其它页面的重定向
  我喜欢WP系统的一个重要原因就是它的各个文件分工非常明确,模板系统也是如此,所有的模板系统中都可以用一个404.php来出来404错误。除了上面三个重定向之外,大约还剩下70%的页面重定向没有完成(不要惊愕于这个工作的复杂性),如:按日期的归档、精华文章、评论页面、分类显示、附件下载和登录页面等等。由于这些页面一般都是被搜索引擎以静态地址收录的,所以不能像前面那样写PHP文件完成重定向,只能根据网址来逐个判断,把原地址转向新地址。其中有无数的细节要注意,如原来的星标日志对应新系统中的featured分类文章、两个系统的分类ID的对应关系等。综上,这个404.php便极度冗长。
  怎么知道你的网站是否有404错误呢?在WP中,只需要在404.php文件中用mail()函数往你的邮箱发报告就可以了。我将不能成功重定向的页面都发到404@yihui.name了,看看$_SERVER变量,大概就知道是哪一页出错了,以及是活人点的链接还是搜索引擎的蜘蛛人在看我的页面。
<?php
$info = $_SERVER['REQUEST_URI'];
$prefix = substr($info, 1, 2);

if (strpos($info, ‘/index’)) {
header(“HTTP/1.1 301 Moved Permanently”);
header(“Location:http://$_SERVER[HTTP_HOST]/”.$prefix.”/“);
} else if (strpos($info, ‘/post/’)) {
header(“HTTP/1.1 301 Moved Permanently”);
$tmp = current(explode(‘_’, pathinfo($info, PATHINFO_FILENAME)));
if ($prefix == ‘en’) {
if ($tmp > 2) {
$tmp += 1;
}
}
header(“Location:http://$_SERVER[HTTP_HOST]/”.$prefix.”/?p=”.$tmp);
} else if (strpos($info, ‘/star’)) {
header(“HTTP/1.1 301 Moved Permanently”);
$tmp = $prefix==’cn’ ? 618 : 150;
header(“Location:http://$_SERVER[HTTP_HOST]/”.$prefix.”/?cat=”.$tmp);
} else if (strpos($info, ‘/view’)) {
header(“HTTP/1.1 301 Moved Permanently”);
header(“Location:http://$_SERVER[HTTP_HOST]/”.$prefix.”/?feed=comments-rss2“);
} else if (strpos($info, ‘/category’)) {
header(“HTTP/1.1 301 Moved Permanently”);
$tmp = explode(‘_’, pathinfo($info, PATHINFO_FILENAME));
if ($prefix == ‘cn’) {
if (count($tmp) > 1) {
if ($tmp[1] == ’2′) {
header(“Location:http://$_SERVER[HTTP_HOST]/”.$prefix.”/“);
} else {
header(“Location:http://$_SERVER[HTTP_HOST]/”.$prefix.”/?cat=” .
$tmp[1]);
}
} else {
header(“Location:http://$_SERVER[HTTP_HOST]/”.$prefix.”/“);
}
} else {
$catmap = array(’7′ => 6, ’8′ => 7, ’9′ => 9, ’0′ => 117, ’1′ => 11, ’2′ => 147,
’6′ => 12, ’10′ => 148, ’3′ => 4, ’4′ => 8, ’5′ => 10);
if (count($tmp) > 1) {
if (array_search($tmp[1], array_keys($catmap)) !== false) {
header(“Location:http://$_SERVER[HTTP_HOST]/”.$prefix.”/?cat=” .
$catmap[$tmp[1]]);
} else {
header(“Location:http://$_SERVER[HTTP_HOST]/”.$prefix.”/“);
}
} else {
header(“Location:http://$_SERVER[HTTP_HOST]/”.$prefix.”/“);
}
}
} else if (strpos($info, ‘/archive’)) {
header(“HTTP/1.1 301 Moved Permanently”);
$tmp = explode(‘_’, pathinfo($info, PATHINFO_FILENAME));
if (count($tmp) > 2) {
if (strlen($tmp[1]) == 1) {
$tmp[1] = ’0′.$tmp[1];
}
if ($tmp[2] < 2007 || $tmp[2] > 2009) {
header(“Location:http://$_SERVER[HTTP_HOST]/”.$prefix.”/“);
} else {
header(“Location:http://$_SERVER[HTTP_HOST]/”.$prefix.”/?m=”.$tmp[2].$tmp[1]);
}
} else {
header(“Location:http://$_SERVER[HTTP_HOST]/”.$prefix.”/“);
}
} else if (strpos($info, ‘/showday’)) {
header(“HTTP/1.1 301 Moved Permanently”);
$tmp = explode(‘_’, pathinfo($info, PATHINFO_FILENAME));
if (count($tmp) > 3) {
if (strlen($tmp[2]) == 1) {
$tmp[2] = ’0′.$tmp[2];
}
if (strlen($tmp[3]) == 1) {
$tmp[3] = ’0′.$tmp[3];
}
if ($tmp[2] < 2007 || $tmp[2] > 2009) {
header(“Location:http://$_SERVER[HTTP_HOST]/”.$prefix.”/“);
} else {
header(“Location:http://$_SERVER[HTTP_HOST]/”.$prefix.”/?m=”.$tmp[1] .
$tmp[2].$tmp[3]);
}
} else {
header(“Location:http://$_SERVER[HTTP_HOST]/”.$prefix.”/“);
}
} else if (strpos($info, ‘/attachment’)) {
header(“HTTP/1.1 301 Moved Permanently”);
$tmp = pathinfo(urldecode($info), PATHINFO_BASENAME);
header(“Location:http://$_SERVER[HTTP_HOST]/”.$prefix.”/wp-content/uploads/”.$tmp);
} else if (strpos($info, ‘?tag=’)) {
header(“HTTP/1.1 301 Moved Permanently”);
$tmp = ”;
if (isset($_REQUEST["tag"])) {
$tmp = $_REQUEST["tag"];
}
header(“Location:http://$_SERVER[HTTP_HOST]/”.$prefix.”/?tag=”.$tmp);
} else if ($info == ‘/’.$prefix.’/tag/’) {
header(“HTTP/1.1 301 Moved Permanently”);
header(“Location:http://$_SERVER[HTTP_HOST]/”.$prefix.”/“);
} else if (strpos($info, ‘read.php’)) {
header(“HTTP/1.1 301 Moved Permanently”);
header(“Location:http://$_SERVER[HTTP_HOST]/”.$prefix.”/?p=” .
pathinfo($info, PATHINFO_FILENAME));
} else if (strpos($info, ‘links.php’)) {
header(“HTTP/1.1 301 Moved Permanently”);
header(“Location:http://$_SERVER[HTTP_HOST]/”.$prefix.”/“);
} else if (strpos($info, ‘cv_yihui’)) {
header(“HTTP/1.1 301 Moved Permanently”);
header(“Location:http://$_SERVER[HTTP_HOST]/cv/cv_yihui_”.$prefix.”.htm“);
} else if (strpos($info, ‘visit.php’)) {
header(“HTTP/1.1 301 Moved Permanently”);
header(“Location:http://$_SERVER[HTTP_HOST]/”.$prefix.”/“);
} else if (strpos($info, ‘securitycode.php’)) {
header(“HTTP/1.1 301 Moved Permanently”);
header(“Location:http://$_SERVER[HTTP_HOST]/”.$prefix.”/“);
} else if (strpos($info, ‘login.php’)) {
header(“HTTP/1.1 301 Moved Permanently”);
header(“Location:http://$_SERVER[HTTP_HOST]/”.$prefix.”/wp-login.php“);
}

else {

//if(array_search($ext, array(‘gif’, ‘js’, ‘png’, ‘jpg’, ‘jpeg’, ‘css’)) !== false) {
if (strpos($info, ‘/images/js’) || strpos($info, ‘/images/lightbox’)
|| strpos($info, ‘/images/arrows’) || strpos($info, ‘/template/fighting/’)
|| strpos($info, ‘/emot/thumbnail/’) || strpos($info, ‘/editor/ubb/’)
|| strpos($info, ‘/images/r.css’) || strpos($info, ‘/images/others’)
|| strpos($info, ‘/images/weather’) || strpos($info, ‘/images/weather’)
|| strpos($info, ‘jslang.js’)) {
header(“HTTP/1.1 301 Moved Permanently”);
header(“Location:http://$_SERVER[HTTP_HOST]/”.$prefix.”/“);
} else {
mail(’404@yihui.name’,
“Invalid link: ” . urldecode($info),
‘Request page:http://yihui.name’. $info . PHP_EOL .
‘Referer: ‘ . $_SERVER['HTTP_REFERER']. PHP_EOL .
print_r($_SERVER, true),
“From: Yihui Xie <xie@yihui.name>”);
}

?>

<?php get_header(); ?>

<div id=”wrapper”>

<div id=”home_content”>

<div>
<p>Sorry, I’m changing my blog system now; if the page you are looking for
doesn’t exist, please visit
<a href=”http://yihui.name/<?phpecho $prefix; ?>/”>http://yihui.name/
<?php echo $prefix; ?>/</a>.
I’ll fix the original links soon. Thanks!</p>
<p><img src=”<?php bloginfo(‘template_directory’); ?>/images/mal.jpg”
alt=”a questioning duck” />
</p>
</div>

<div>
<ul>
<li>Mal the Error Duck says, “Uh oh! 404! That means the page you are
looking for doesn’t exist, at least not anymore.”</li>
</ul>
<h2>Latest <?php print(isset($getOptions["num_posts"])?$getOptions["num_posts"]:”10″); ?>
articles</h2>
<ul>
<?php get_archives(‘postbypost’,
isset($getOptions["num_posts"]) ? $getOptions["num_posts"]:10,
”, ‘<li>’, ‘</li>’); ?>
</ul>
</div>

</div>

</div>

<?php get_footer(); ?>

<?php } ?>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Bo-Blog是一款基于PHP的、以MySQL为数据库支持的免费blog程序。 Bo-Blog 2.1.1 更新日志: *修改前台快捷选择语言后无法发表评论。 *修改禁用星标和/或天气后写日志时无法正常使用自动保存功能。 *修改联合撰写人无法工作的问题。建议联合撰写人禁用自动保存功能。 *修正一处与real播放有关的低危害性安全隐患。 *退出登入时清除临时性的skin和language信息。 *后台操作全方位启用Ajax,大大提高工作效率。 *程序功能一键式屏蔽。 *OpenID 有限登入支持。 *指定自定义404页面。 其他许多细小更新之处和bug修正,请查阅安装包内的changelog文档。 Bo-Blog的特色有: 基于XHTML CSS div 布局的模板结构; 可自由定制的页面模块、插件与模板; 部分基于Ajax的新体验; 多语言包化与UTF-8国际编码; 强大的spam信息防御机制; RSS、XML-RPC、Tags支持; 内置留言本、天气、表情、置顶、验证码、头像等;。 主要功能包括: * 基于XHTML CSS div 布局的模板结构,多变、绚烂的模板可使您的blog与众不同; * 可自由定制的页面模块,添加代码不必修改程序,也可通过自动安装文件添加新的模块项目; * 采用基于Ajax的留言和评论添加、管理方式; * Tags功能; * 较 1.x 版本相比,大幅提升的可定制性与易用性; * 可从关键词、链接数量和发言字数等多条件识别广告留言/评论信息; * 全面支持后台对日志、用户、链接等内容的批量化操作,省时省力; * 可自定义的表情系统,可自定义的天气系统,可自定义的头像系统; * 用户组管理体系,可详细设定各组用户的各种使用、管理权限; * 可自动检查是否有更新的程序; * 支持XML-RPC接口; * 链接分组功能,内置链接申请、批准系统; * 多语言包,内置简繁两个语言包; * 支持通过 RSS 直接导入日志内容,可在无转换程序时应急转换; * 兼容PHP5、MySQL5; * 可设置隐藏分类,可撰写隐藏日志,可撰写草稿; * 可选用自定义编辑器; * 两种方式置顶日志,可锁定日志,可为日志加上星标; * 支持Trackback,支持RSS 2.0(可追踪全部新日志、单篇日志或某个分类); * 可视化的链接、分类顺序调整方式; * 可自由设置列表或摘要两种查看方式; * 可自由开关日志、开关注册,并可设置理由; * 时差调整功能; * 基于GD的验证码; * 可导入受到限制或屏蔽的词语; * 附件上传、管理系统; * 可导入、导出专用的备份格式或RSS格式。 特点: 易用的日志功能 以易用性为出发点,可让大众迅速上手的日志程序。集成留言本、表情、天气等满足大众需求的功能。 合理的信息组织 通过置顶、Tags、二级分类、归档、星标等功能,将您的日志有效组织起来,方便查看和搜索。 丰富的定制特性 灵活的页面模块、插件系统、基于xhtml css的模板和多语言架构,充分给予用户自定义的权利。 适当的技术体验 被Ajax、RSS、XML-RPC、Tags等名词搞晕了?那就亲自实践一下吧。您会喜欢它们带来的体验的。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值