广告:本人承接迁移织梦到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页面,上面列出了所有的网站分类,希望用户看到该页面后,能在网站上停留一会:
然而发现也还是不乐观,用户貌似不会继续点其他链接,直接就离开了网站。
今天看了一篇文章“百度搜索引擎优化指南2.0[官方版]”,里面提到这么一段话
301
• 301返回码的含义是“Moved Permanently”,百度会认为网页当前跳转至新url。当遇到站点迁移,域名更换、站点改版的情况时,推荐使用301返回码,尽量减少改版带来的流量损失。虽然百度spider现在对301跳转的响应周期较长,但我们还是推荐大家这么做。
由此我看到了希望,这样做首先用户访问网站能跳转到所需的页面,其次搜索引擎也能进行权重的转移,是一个较为完美的方案。
查找织梦DEDE和wordpress的URL的映射关系
要实现301跳转,需要先找到织梦和wordpress两者URL之间的对应关系,然后才能设定跳转。
而他们两者之间不变的对应项,用文章标题来做最合适不过。
1、获取织梦DEDE的文章标题和链接的对应关系
由于织梦采用静态文件生成的方法提供URL,因此我先把原先备份的网站目录的“a”目录复制过来,得到如下的一个文章目录结果:
其中每一个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中后,可以测试一下,在网页输入旧链接:
回车后发现自动跳转到了新链接:
用fifefox的httpfox插件看一下状态转移:
发现经过两次301页面转移,链接从原来的织梦dede错误地址转到了新的wordpress新地址。
本次代码地址:http://pan.baidu.com/s/1DrBF6
用到了BeautifulSoup开源库用来在python中提取文章的标题。
一直不知道睿思上挂的那个程序员求职网是你的,貌似dedecms漏洞很多,我之前搞了个下载站,第一天就挂了.
我被它吓怕了,打开首页有半屏幕的黑链,在那一闪一闪的
换到wordpress漏洞就少很多了,少年,高手呀.
没有办法的办法,谁让我水平低找不到人家的脚本
很不错的方法,值得学习下,前段时间一直找不到dede转wp的方法,后来只有用火车头采集过去了