网站从织梦DEDECMS迁移到WordPress过程以及URL重定向方法

广告:本人承接迁移织梦到wordpress的业务.

前一段时间自己的程序员求职网www.51projob.com被人挂了黑链,我打开首页顶部出现了大片大片的广告图片,我在后台各种地方找黑链代码,改了几个地方不行,然后把代码下载下来采用搜索等方法找,过程中竟然发现了好多个类似sys.cmd这种木马入口文件,然而黑链却一直没有被删掉。

无奈之下想采用最彻底的解决方法:将程序员求职网从织梦直接迁移到wordpress,因为wordpress是全球著名博客系统,官方对博客系统经常进行升级以修补漏洞,因此安全性很有保障,而织梦作为国内CMS老大,由其衍生了一大批的垃圾站点,各种被入侵各种被挂马,然而官方却对很多漏洞视而不见,修补非常缓慢。考虑到这些,我准备进行迁移。

迁移过程

迁移过程网上很多文章,大致是这样的:

1、在网上找生成织梦全站RSS文件的方法,然后将代码上传,生成全站文章的rss文件;

2、在wordpress中将生成的rss导入进去,这时候已经在wp上看到所有文章了,但是没有内容

这时候需要修改dede_articleaddon表,增加title字段并填充值:

UPDATE dede_addonarticle,dede_archives SET dede_addonarticle.title=dede_archives.title WHERE dede_addonarticle.aid=dede_archives.id;

3、进入织梦数据库,将dede_articleaddon数据表导出来

4、将第3步的数据表导入到wp数据库

5、写一条SQL,大致是这样的

UPDATE wp_posts,dede_addonarticle SET wp_posts.post_content=dede_addonarticle.body WHERE wp_posts.post_title=dede_addonarticle.title;

将wp_posts表和dede_articleaddon根据文章的title作join

然后采用update将wp_posts的content字段设定为join后dede_articleaddon表的内容body字段

6、这时候发现文章已经有内容了,但是图片不对

7、将织梦的uploads目录上传到wordpress的根目录

8、发现文章和图片全部OK了

链接规则变化导致百度收录为0

迁移完成后,感觉松了一口气,wordpress终于能够显示织梦之前所有的文章了,并且现在我能够使用windows live write写文章,感觉非常的方便。

然而过了几天我发现,百度收录网站链接几乎变成了0,看了一下是因为URL规则变化了,原来是这样的链接:

http://www.51projob.com/a/weiruan/20120826/449.html

现在变成了这样:

http://www.51projob.com/?p=2343

百度收录的650篇文章,全部是第一种格式的URL,于是用户链接进来全部是404页面,找不到文章了。

这可是个大事,辛辛苦苦2年积攒的页面权重,就这样没了,岂不是前功尽弃,如果百度因此惩罚我的网站永不收录,那我该哭了。

采用301进行URL的redirect能拯救网页权重

对于用户不能访问的问题,我开始是做了一个漂亮点的404页面,上面列出了所有的网站分类,希望用户看到该页面后,能在网站上停留一会:

20130926213412

然而发现也还是不乐观,用户貌似不会继续点其他链接,直接就离开了网站。

今天看了一篇文章“百度搜索引擎优化指南2.0[官方版]”,里面提到这么一段话

301
• 301返回码的含义是“Moved Permanently”,百度会认为网页当前跳转至新url。当遇到站点迁移,域名更换、站点改版的情况时,推荐使用301返回码,尽量减少改版带来的流量损失。虽然百度spider现在对301跳转的响应周期较长,但我们还是推荐大家这么做。

由此我看到了希望,这样做首先用户访问网站能跳转到所需的页面,其次搜索引擎也能进行权重的转移,是一个较为完美的方案。

查找织梦DEDE和wordpress的URL的映射关系

要实现301跳转,需要先找到织梦和wordpress两者URL之间的对应关系,然后才能设定跳转。

而他们两者之间不变的对应项,用文章标题来做最合适不过。

1、获取织梦DEDE的文章标题和链接的对应关系

由于织梦采用静态文件生成的方法提供URL,因此我先把原先备份的网站目录的“a”目录复制过来,得到如下的一个文章目录结果:

20130926214253

其中每一个html就是一个文章页面,而其目录访问结构“/a/alibaba/20120828/481.html”就是文章的具体链接子地址,加上www.51projob.com作为开头,就形成了http://www.51projob.com/a/alibaba/20120828/481.html作为正式的访问链接。

然后用python递归遍历的方法,可以得到每个文件的链接以及文章标题

[面试经验] [阿里巴巴]笔试面试全过程(精华)    www.51projob.com/a/alibaba/20120828/493.html
阿里巴巴笔试题    www.51projob.com/a/alibaba/20120828/494.html
[阿里巴巴]面试失败经历    www.51projob.com/a/alibaba/20120828/495.html
阿里巴巴常用面试题    www.51projob.com/a/alibaba/20120828/496.html
《分享面试经历—阿里巴巴》    www.51projob.com/a/alibaba/20120828/497.html
阿里巴巴面试总结    www.51projob.com/a/alibaba/20120828/498.html
阿里巴巴面试经历    www.51projob.com/a/alibaba/20120828/499.html
淘宝网2010春季校园招聘笔试题    www.51projob.com/a/alibaba/20120829/519.html
淘宝2011.9.23校园招聘会面试题    www.51projob.com/a/alibaba/20120830/540.html
阿里云2011.9.17招聘会笔试题    www.51projob.com/a/alibaba/20120903/589.html

2、获取wordpress每个文章的链接地址和标题

这个比较简单,我直接进数据库,将wp_posts数据表的(id,post_title)两列导出就可以了,然后根据id可以构造每个文章的链接,比如http://www.51projob.com/?p=2482,这样,我就得到了wordpress的文章标题和URL的对应关系:

[百度] Web笔试分享(下)    http://www.51projob.com/?p=2477
百度笔试题:malloc/free与new/delete的区别    http://www.51projob.com/?p=2473
百度技术研发笔试题目    http://www.51projob.com/?p=2435
百度2012招聘测试工程师实习生笔试题    http://www.51projob.com/?p=2425
百度2011招聘笔试题和答案解析    http://www.51projob.com/?p=2424
百度2010校园招聘算法题之编译模块    http://www.51projob.com/?p=2423
百度研发笔试题    http://www.51projob.com/?p=2408
百度的前端面试经历    http://www.51projob.com/?p=2380
百度面试全攻略    http://www.51projob.com/?p=2340
百度面试题2012年8月28日    http://www.51projob.com/?p=2327
2011百度校园招聘笔试题 C++类-附原创答案    http://www.51projob.com/?p=2264
百度面试题集锦    http://www.51projob.com/?p=2256
百度2012校招笔试题之位数和编码    http://www.51projob.com/?p=2214
百度笔试题目分享    http://www.51projob.com/?p=2151

3、实现两类URL的映射

这就很简单了,由于前两步已经得到了(title, dede_url)和(title,wp_url)两份数据,现在根据title作下join,就得到了(dede_url,wp_url)即织梦DED的URL和wordpress的对应文章URL的对应关系表:

www.51projob.com/a/baidu/20120813/302.html    http://www.51projob.com/?p=2480
www.51projob.com/a/baidu/20120813/304.html    http://www.51projob.com/?p=2478
www.51projob.com/a/baidu/20120813/305.html    http://www.51projob.com/?p=2477
www.51projob.com/a/baidu/20120813/309.html    http://www.51projob.com/?p=2473
www.51projob.com/a/baidu/20120814/352.html    http://www.51projob.com/?p=2435

批量生成apache的301 redirect重置命令

可以修改网站根目录下的.htaccess文件来进行URL的转向,但是URL映射关系太多,所以我们可以用程序自动生成一下(在文本文件中批量替换也能实现),最终得到下面的重定向规则:

Redirect 301 /a/alibaba/20120903/591.html http://www.51projob.com/?p=2209
Redirect 301 /a/alibaba/20120908/636.html http://www.51projob.com/?p=2176
Redirect 301 /a/alibaba/20120908/642.html http://www.51projob.com/?p=2170
Redirect 301 /a/alibaba/20120911/652.html http://www.51projob.com/?p=2160
Redirect 301 /a/baidu/20120329/150.html http://www.51projob.com/?p=2604
Redirect 301 /a/baidu/20120504/222.html http://www.51projob.com/?p=2543
Redirect 301 /a/baidu/20120505/223.html http://www.51projob.com/?p=2542
Redirect 301 /a/baidu/20120505/225.html http://www.51projob.com/?p=2540
Redirect 301 /a/baidu/20120715/285.html http://www.51projob.com/?p=2495
Redirect 301 /a/baidu/20120813/300.html http://www.51projob.com/?p=2482
Redirect 301 /a/baidu/20120813/301.html http://www.51projob.com/?p=2481

测试,大功告成

将上面生成的命令全部贴到.htaccess中后,可以测试一下,在网页输入旧链接

20130926215752

回车后发现自动跳转到了新链接

20130926215933

用fifefox的httpfox插件看一下状态转移:

20130926220121

发现经过两次301页面转移,链接从原来的织梦dede错误地址转到了新的wordpress新地址。

本次代码地址:http://pan.baidu.com/s/1DrBF6

用到了BeautifulSoup开源库用来在python中提取文章的标题。

相关推荐

5 thoughts on “网站从织梦DEDECMS迁移到WordPress过程以及URL重定向方法”

  1. 很不错的方法,值得学习下,前段时间一直找不到dede转wp的方法,后来只有用火车头采集过去了

    回复

回复 追梦 取消回复