dudo博客

dudo.org已经从PJBlog转换到了WordPress一段时间了,这期间一直在不停地做细节上的优化工作。毕竟不是原生于WordPress,即使是转换过程一切顺利,也仅仅能够保证你的网站内容正常浏览,不丢失原来的信息,但是肯定会或多或少地存在着问题,其中最大的一个就是PJBlog(包括Z-Blog)的链接形式完全不同,无论是搜索引擎中已经收录的页面还是别人指向你站上某个文章的链接都将失去作用,这无疑是毁灭性。可能你辛辛苦苦经营的网站就要从0开始做了。我的网站就是经历了这样一个过程,不过痛苦的时候当我找到解决办法的时候Google和百度已经更新了,收录大大减少,访问量只有原来的一个零头,随之出现的是大量的404 Not Found错误。希望这篇文章能够帮助需要从Z-Blog或者PJBlog等ASP程序转向WordPress的人提供些许帮助。

一、Z-blog、PJBlog等转换到WordPress后可能出现的问题

下面我只是列举一下,不明白的可以留言讨论。

  1. 严重的404错误。很明显,每个程序都自己的路径结构,一旦你从Zblog、PJBlog等转换到WordPress之后,原来已经被收录到搜索引擎和在其它网站上指向你文章的链接都将失效。点击这些链接无一不会出现404 Not Found的HTTP错误提示。这将严重影响你网站的易用性,访问量会大降低。即使是你网站中的内链也一样出现404的错误,外链无法有效到达,内链不断返回HTTP错误,这样的网站是多么的让人讨厌!不用多少时间,你的Page Rank必然下滑,dudo.org就是一个很好的例子,在上一次的更新中,PR由5降到了3
  2. 你将失去所有的订阅用户。在Z-Blog中的feed订阅地址默认为 http://域名/feed.xml,PJBlog则是http://域名/feed.asp?id=的形式,而WordPress中则是http:/域名/feed/(当然WordPress中是可以自定义链接形式的)。很显然,你一旦完成博客的转换之后,你网站原来的订阅者将无法得到更新。这部门流量将会永远地失去。
  3. 搜索引擎严重不友好,影响页面收录。由于搜索引擎已经收录了你Z-Blog或者PJBlog中的页面,第一次蜘蛛沿着原来的链接年爬到你的页面发现错误,第二次还会发现同样的错误,次数一多蜘蛛将不会再来了。正确的做法是,如果你的页面已经转移了,那么你要重新定向到一个新的页面并向搜索引擎返回一个301代码,告诉搜索引擎下次使用新的链接来访问。如果这个页面确实已经不存在了,那么你要返回一个410资源永久删除的代码。

二、找出所有需要优化的地方

现在看来从Z-Blog、PJBlog转换到WordPress后仅仅要求内容完整还是不够的,我们必要在网站易达上下下功夫,既要实现完美转换又要不丢失访问量,还要表现的对搜索引擎友好。现在以PJBlog为例归纳一下需要做改进的地方。

  1. 文章的链接地址。PJBlog3中访问一个页面的链接形式有如下几种:
    http://域名/default.asp?id=123
    http://域名/article.asp?id=123
    http://域名/article/分类/123.asp
    http://域名/article/分类/别名.htm
    由于PJBlog有动态、静态、伪静态等几种形式,所以它的链接形式也有很多种,这要看你使用的是哪种、搜索引擎中收录的是哪种了。而WordPress中则是
    http://域名/?p=id
    当然可能会改变WordPress中的链接样式,不过这不影响,一切按照上面的形式进行处理即可,因为它本身就是一个跳转。
  2. 按日期分类。PJBlog中的文章存档是按年、年月、年月日三种类型进行分类的。其链接形式为
    http://域名/default.asp?log_Year=2009&log_Month=9&log_Day=2
    http://域名/default.asp?log_Year=2009&log_Month=9
    http://域名/default.asp?log_Year=2009
    在WordPress中则都是
    http://域名/?m=200909
  3. Tag的访问。PJBlog中的Tag访问使用的是http://域名/default.asp?tag= 的形式 ,WordPress则是 http://域名/?tag=的形式
  4. RSS输出,PJBlog中的RSS输出使用的是feed.asp,形式为http://域名/feed.asp?catID= 而WordPress则是http://域名/?feed=rss2的形式
  5. 固定页面。如果PJBlog中的默认首页是default.asp,搜索引擎会收录这个页面,而在WordPress中则是index.php,不过大多数情况下,搜索引擎会直接收录你的域名来代替。
  6. 翻页。PJBlog指定一个页面的链接形式是 http://域名/default.asp?page=
  7. 分类目录:PJBlog中指定一个分类目录使用的 http://域名/default.asp?catID= 而WordPress中 http://域名/?cat=

三、了解.htaccess文件

我们的一切工作都是围绕着.htaccess这个文件展开的,所以首先你要确定的你的虚拟主要是支持.htaccess文件的。对于是使用Windows主机的朋友就放弃吧,因为Windows压根就不支持以“.”开头的文件名。如果你是使用的Linux主要,那么需要了解一下是否允许你使用.htaccess,当然,可以先修改上传测试一下。

下面我们简单地了解一下,什么是.htaccess文件,它都能做些什么

什么是.htaccess文件?如果想获得详细的介绍,请参照Apache Tutorial: .htaccess files。.htaccess文件(或者”分布式配置文件”提供了针对目录改变配置的方法, 即,在一个特定的文档目录中放置一个包含一个或多个指令的文件, 以作用于此目录及其所有子目录。这有点像asp.net中的web.config文件,它属于web应用程序机的,也就是说任何一个web请求都要通过.htaccess来处理,这个请求规则如果在.htaccess中定义了,那么就按照.htaccess中的规则来访问,如果没有就按照默认方式。但是无论什么情况下都必要经过.htaccess文件。

既然有了这样一个简单的概念,那么我们就以通过配置.htaccess来让每个访问按照我们的方式来访问了。

注意:我们用到的是Apach中的路径重写Mod_Rewirte模块,关于该模块中的方法请点击链接参阅。

四、具体处理细节

打开或者创建一个.htaccess文件,保存为utf-8编码格式。在这里可能有人疑惑,如果一个链接访问的一个asp扩展名的文件,php主要怎么处理呢?这里不要担心,你只要记住htaccess负责一切处理机制,我们在真正访问asp文件之前就把链接重要定向了。

这里有个问题要特别注意:原来PJBlog中的文章ID未必是连续的,因为你可能写了一篇文章后又删除了,那么这个ID会被跳过去,而当你把这些文章导入WordPress中时,在MySQL数据库中产生的主键ID却上连续的,那么就意味着,同一个ID数值对应着不同的文章。同时,WordPress默认有两篇文章,它已经占去了两个ID了,所以你导入文章后,你的第一篇文章的ID一定不是1,即便你删除了也不是1。所以唯一的办法是手动建立一一对应关系。

明确了上面的问题之后,我们开始按照第二节中的归纳出来的所有问题一处理。

  1. 在.htaccess中创建一行“AddType x-httpd-php .asp“,意思是对于asp扩展名的文件用php处理程序去处理(注:这句可能多余,不需要加,没有测试)。然后再添加
    RewriteEngine on
    RewriteOptions MaxRedirects=10

    意思是打开路径重写功能(默认打开),同一路径最多重写10次,避免出现死循环。

  2. 处理文章链接,由于我没有使用 http://域名/article/分类/123.asp 的链接形式,这里忽略。
    RewriteCond %{QUERY_STRING} ^id=1$ [NC]
    RewriteRule ^(default|article)\.asp$ http://dudo.org/?p=5 [NC,R=301,L]
    RewriteRule ^article\/.+\/1\.htm$  http://dudo.org/?p=5 [NC,R=301,L]

    简单解释一下,
    第1行中的条件判断,即如果请求链接中参数部分为id=1,那么执行下面的RewriteRule语句,[NC]的意思是忽略大小写;
    第2行是重写规则,即如果访问的文件是default.asp或者article.asp,那么定向到http://dudo.org/?p=5,后面的参数意思是忽略大小写、向浏览器返回301状态码、停止执行后面的语句。
    第3行也是重写规则,意思为如果访问的路径为article目录下的任意子目录中的1.htm,那么就跳转。

    需要注意的是,第三条重写规则不受RewirteCond约束,RewirteCond只能约束和它紧挨着的RewriteRule。

    这样一个重写规则就做出了。可能有人会说,我的WordPress路径不是这样的,怎么办呢?不要担心,无论的路径是什么样的,最终还是要转换成上面的格式,所以这样写没有问题。

  3. 按日期分类存档的重写。
    RewriteCond %{QUERY_STRING} ^log_year=(\d+)&log_month=(\d+)&log_day=(\d+).*$ [NC]
    RewriteRule ^default\.asp$ http://dudo.org/?m=%1%2 [NC,R=301,L]

    不知道WordPress的存档可不可以按年、月、日三种方式存档,于是就只写了一个按年月的,可自行修改。

  4. Tag的重写:
    RewriteCond %{QUERY_STRING} ^tag=(.*)$ [NC] RewriteRule ^default\.asp$ http://dudo.org/?tag=%1 [NC,R=301,L]

    注意的是,这是用的正则表达式中反向引用。

  5. RSS输出链接:
    RewriteRule ^.*feed\.asp$ http://dudo.org/?feed=rss2 [NC,R=301,L]

    只需要这么一句就够了,不过这里没有考虑到分类输出RSS。

  6. 如果是访问的default.asp那么,应该使用现在的语句:
    RewriteRule Default\.asp http://dudo.org/ [NC,R=301,L]
  7. 翻页的写法
    RewriteCond %{QUERY_STRING} ^page=(\d+).*$ [NC]
    RewriteRule ^default\.asp$ http://dudo.org/?paged=%1 [NC,R=301,L]
  8. 最后是文章分类的处理了,也比较简单
    RewriteCond RewriteCond %{QUERY_STRING} ^catID=(\d)$ [NC]
    RewriteRule ^default\.asp$ http://dudo.org/?cat=%1

    注意的是,这里的ID不一定相同,所以可以将“(\d)”和“%1”分别换成相应的数字。

好了,所有的问题都解决了。且慢,似乎对于文章的处理只写了一个,那么其它的文章怎么办呢?很不幸,只能这样子全写了,如果有300篇你就写300遍吧。听起来很恐怖,但是如果你使用EditPlus+Excel等工具进行替换话其实很方便。方法是,首先找到它们ID的一对应关系,然后卖出Excel,再直接使用Excel公式计算一遍,最后到EditPlus中编辑即可。

是的,可能有简捷的方法,那就是使用RewriteMap方法,只需要在一个文本文档中建立对应关系,系统会自动查找,不需要那么多的判断语句。不过我试验失败了,有人说在.htaccess中不能使用RewriteMap,只能在httpd.conf中使用,囧~~~所以就写了300我遍,希望高人指点。

五、最后的测试

通过上面的改进之后,我发现最近我的博客访问量又开始逐渐恢复了,至少从别人的网站上跳转到我的网站时能到达正确的页面了。如果你不确定你的网站存在哪些错误你可以使用Google站长工具来查看你网站中存在的错误,Google站长工具会把错误给你分门别类,不过有些错误是在你的网站转换完成数日内才会提示到的。

最后,使用dudo.org下面原来PJBlog中的链接来访问看看效果如何:
http://www.dudo.org/article.asp?id=195
http://www.dudo.org/Default.asp?id=300



共有(6)条评论

发表于 2010-4-12 at 22:24 #1楼

在用wordpress,以前用过z-blog,也很好用

[回复]


远方博客 发表于 2010-4-13 at 14:55 #2楼

在用WP,dudu现在都整好了。

[回复]


龙崽 发表于 2010-4-23 at 18:03 #3楼

据说PJ很烂啊,没见过几个用PJ的

[回复]

dudo 回复:

PJBlog算是ASP博客程序中比较优秀的一款了,但是比WP有差距,不过据说PJ4将会有很大改进

[回复]


从PJBlog转Wordpress,搬家记录手札| YesCola.FM 发表于 2010-10-15 at 23:02 #4楼

[…] 3、如果博客访问量比较小,或者基本上只是个人日记类型,那么上面的操作已经基本完成了整个的转换过程。但如果访问量大,搬家后遇到的最大问题就是文章链接变了,无论是访客还是搜索引擎都会被404.. ,在一段时间内让站点流量降低到冰点。所以需要将以前所有日志的链接重定向,并且对搜索引擎做重新索引。这部分内容我并没有涉及,有需要可以参考这两篇文章PJBlog转WordPress全程实录、Z-Blog、PJBlog转换到WordPress后的细节处理,作者写得非常详细。 Blog, PJblog, wordpressTAG: 评论 (0) Trackbacks (0) #commentlist{border-bottom:none;} […]


深圳摄影 发表于 2011-8-09 at 11:01 #5楼

用过wordpress,以前用过z-blog,现在用cms也很好用

[回复]


随便说两句
名字:
Email:
网站:
内容:

无觅相关文章插件,快速提升流量