Wordpress平滑迁移至SupeSite [ 原创 ]Wordpress是非常优秀的博客系统,完全的国际化utf-8编码多国语言包、丰富的插件支持、丰富的主题包(模板)、详尽的开发人员手册、完善的开源社区支持,因此非官方的Wordpress模板、插件也有非常好的兼容性、符合W3C标准。所以,虽然是博客系统,但借助于丰富的插件,仍可以实现几乎所有CMS系统能实现的功能。不过非常严重的缺点是效率非常低,即时安装了缓存插件以及做大量的服务器端缓存。文章表容量在100条记录以内时,也慢到0.x秒的查询速度(一个简单的页面都会调用至少12次数据库查询,PHP的函数嵌套就非常多层了),这在PHP程序中是非常缓慢的;当数据库文章表的容量在10000条以上时,首页执行时间达到恐怖的5.x秒级别!! Supesite是康盛创想商业公司的CMS产品,选中它的最主要原因是效率非常高,在几乎不做缓存的情况下,一百万条的数据首页执行时间都能在0.1x秒级别!初始功能丰富,适合国内初学的站长使用。因以前是封闭软件,前段时间刚开源,无开发人员手册,无任何插件接口,无法开发插件,现阶段要修改supesite的逻辑功能只能修改supesite源程序。使用supesite系统的大多是水平不高的站长,建几个采集资讯的垃圾站,开源社区支持不丰富,就连官方的很多代码都不符合W3C标准,所以也别指望目前能有谁开发出非常优秀的supesite插件和模板。不过如果康盛创想能把Supesite像Discuz!论坛那么重视,我相信Supesite能做到国内非常优秀的CMS平台,毕竟他们是有实力开发的,只是目前不够完善。有朋友要问为什么我不选诸如国外的Joomla!、Dupal或者PHPCMS、DedeCMS等其他CMS平台。这里简单说一下国外的CMS平台和Wordpress的优缺点相差不大,国内的PHPCMS和DedeCMS确实做的很优秀,但是我主要看到了SupeSite的前景可能会比这两个国内CMS更好。 好了,下面开始说迁移步骤,以Wordpress 2.7迁移至Supesite 7.0(UTF-8)为例,注:写详细内容太麻烦,只写实现方法,请朋友们自己实现,如确实有困难可联系本人指导。 分析:依靠Wordpress(以下简称WP)和Supesite(以下简称SS)自己的程序逻辑,其实需要迁移的数据无非就是文章(资讯)、文章附件(图片等)、文章评论、注册用户资料、主题模板,最后注意URL链接,尽量让搜索引擎已收录的链接能成功跳转到新系统上,不被搜索引擎降分。 在文章资讯和文章附件少的时候,完全可以手动从WP复制粘贴文章到SS中,一篇一篇文章重新添加。 一、确保原SupeSite站点可访问。 例如本站在5月31日之前http://www.是wordpress系统,所以原wordpress站点是http://www.。 如果本机localhost调试,也建议以基于多域名的虚拟主机方式来配置站点,这样后期修改量更小。 二、搭建新的UCenter(简称UC)和临时SupeSite平台。 注意是UCenter,不是UCenterHome。UCenter为康盛产品平台的用户中心,UCenter为SNS交友产品,UCenter必需,UCenterHome非必须。例如本站UC为http://uc.,临时SS为http://temp.。SupeSite安装方法请参考其官方网站http://www./thread-1239276-1-1.html 三、用SS采集器采集原WP文章。 使用SS采集器自己添加规则按分类多次采集http://www.上的文章到临时SS站点http://temp.对应的分类中。 四、自写PHP程序修改SS文章ID、发布时间与WP上对应文章的一致。 因SS采集器采集到的文章ID为自动增1,发布时间为当前时间,无法保持与WP系统下的对应文章ID和发布时间一致。所以此时应自写PHP程序,思路为: 1、首先让SS数据库中supe_spaceitems、supe_spacenews和supe_attachments表的itemid、nid每个增加10000。目的是修改SS文章ID时不会出现ID冲突的情况。 2、每次传递一个ID给自写程序,该程序利用此ID到WP的数据库wp_posts表(WP文章表)中查询post_ID主键,得到post_title(文章标题,赋值给$title变量),得到post_date(文章发布时间赋值给$postdate)。参考SQL语句 1. select `post_title`, `post_date` from `wp_posts` where `post_ID` = '{$id}' ;
3、根据刚刚得到的$title,到SS的数据库中的supe_spaceitems表(SS文章列表)中查询subject为$title的,得到itemid(赋值给$ssoldid)。参考SQL语句 1. select `itemid` from `supe_spaceitems` where `subject` LIKE '%{$title}%' LIMIT 0,1;
4、因为WP数据库记录发布时间为标准日期型,而SS数据库记录UNIX时间戳型,如下图所示,所以再导入时间时应用PHP程序先行处理,PHP语句 1. date_default_timezone_set( "Asia/Shanghai" ); 2. $postdate = strtotime ( $postdate ); 1. update `supe_spaceitems` set `itemid`= '{$id}' , `dateline`= '{$postdate}' where `itemid`= '{$ssoldid}' ;
5、根据刚刚得到的$ssoldid,到SS的数据库中的supe_spacenews表(SS文章内容表)中查询itemid为$ssoldid的,改写itemid和nid均为$id。参考SQL语句 1. update `supe_spacenews` set `itemid`= '{$id}' , `nid`= '{$id}' where `itemid`= '{$ssoldid}' ;
6、到SS的数据库中的supe_attachments表(SS文章附件表)中查询itemid为$ssoldid的,并改写itemid为$id。参考SQL语句 1. update `supe_spaceitems` set `itemid`= '{$id}' where `itemid`= '{$ssoldid}' ;
7、设$id循环增1,到你原来的WP系统数据库文章ID最大值的那个结束 8、复查文章,看看有无错误。 9、设置supe_spaceitems、supe_spacenews和supe_attachments表的itemid或nid的自增字段为你目前最大itemid+1,否则用SS系统后写一篇文章,其ID将为10001。 五、评论导入。 将WP的post_comments表导出为Microsoft Excel CSV格式,使用Excel编辑添加删除列等,使其存放格式与supe_spacecomments表一致。如图: 将修改后的Excel表格另存为unicode的csv格式,然后FTP传至服务器上,使用此文http://www./viewnews-100.html提供的方法将csv文件导入SS数据库的supe_spacecomments表中。记得检查导入的数据是否正确 六、用户导入 WP和UC的密码加密算法不同,不能直接复制密文的方式导入,所以目前没有很好的办法保留原有用户密码导入,只能在UC中创建新用户,用户名与邮件设置为和原WP中的注册用户一致,再到SS登录中使用忘记密码功能给每个用户发送一封忘记密码的邮件,让该用户自己重设密码。 八、主题包修改 如果打算设计不变,而把WP的主题包修改成SS系统可用的,应具备比较丰富的xHMTL、CSS以及PHP知识,将原WP主题下载,保持主题包内部文件的原有相对路径。参考SS的default主题结构,将原来的index.php修改成index.html.php,header.php修改成header.html.php等,以SS模板文件的形式存在。 01. 在每个.html.php文件头部加入 02. 03. 修改php get_header(); ?>为<!--{template header}-->修改为 04. 05. 修改和为 $_SCONFIG [sitename] 06. 07. 修改为{S_URL}/templates/ $_SCONFIG [template]/style.css 08. 09. 删除pingback 10. 11. 修改为 $_SCONFIG [seohead] 12. 13. 修改为{S_URL}/templates/ $_SCONFIG [template] 14. 15. 修改和及为{S_URL} 16. 17. 修改为<!--{loop $channels [ 'menus' ] $key $value }--><LI><A href= "$value%5Burl%5D" > $value [name]</A></LI><!--{/loop}-->修改为<!--{block name= "category" parameter= 18. "type/news/isroot/1/order/c.displayorder/limit/0,12/cachetime/ 19. 80800/cachename/category" 20. }--><!--{loop $_SBLOCK [ 'category' ] $value }--><LI><A href= "$value%5Burl%5D" > $value [name]</A></LI><!--{/loop}-->修改为<!--{template footer}-->修改为<!--{block name= "spacenews" parameter= 21. "catid/ $thecat [subcatid]/order/ 22. i.dateline DESC/perpage/10/cachename/allnews/tpl/data"}--><!--获取当前分类所有文章并分页显示--><!--{ if $_SBLOCK [ 'allnews' ]}--><!--{loop $_SBLOCK [ 'allnews' ] $value }-->修改为<!--{/loop}-->修改为 $value [subject] 23. 24. 修改为# date ( "Y年m月d日" , $value [ "dateline" ])# 25. 26. 修改为 $value [url] 等等,总之参考default主题修改 九、开启Rewrite并添加自定义Rewrite规则。 01. rewrite ^/([0-9]+)/spacelist(.+)$ /index.php?uid/ $1 /action/spacelist/type $2 last; 02. rewrite ^/([0-9]+)/viewspace(.+)$ /index.php?uid/ $1 /action/viewspace/itemid $2 last; 03. rewrite ^/([0-9]+)/viewbbs(.+)$ /index.php?uid/ $1 /action/viewbbs/tid $2 last; 04. rewrite ^/([0-9]+)/(.*)$ /index.php?uid/ $1 / $2 last; 05. rewrite ^/([0-9]+)$ /index.php?uid/ $1 last; 06. rewrite ^/action(.+)$ /index.php?action $1 last; 07. rewrite ^/category(.+)$ /index.php?action/category/catid $1 last; 08. rewrite ^/viewnews(.+)$ /index.php?action/viewnews/itemid $1 last; 09. rewrite ^/viewthread(.+)$ /index.php?action/viewthread/tid $1 last; 10. rewrite ^/mygroup(.+)$ /index.php?action/mygroup/gid $1 last; 这导致原WP网址结构为http://www./html/2009/300.html,因为SS不能自定义URL地址,所以SS的文章URL为http://temp./viewnews-300.html,我们需要用Nginx做个跳转,在原有SS默认Nginx Rewrite规则上增加以下规则: 01. rewrite ^/album http: //picasaweb.google.com/littlehz permanent; 02. rewrite ^/about /action-channel-name-about.html permanent; 03. rewrite ^/pollsarchive /action-poll-pollid-1.html permanent; 04. rewrite ^/todo /action-channel-name-about.html permanent; 05. rewrite ^/downloads /m.php?name=downloads permanent; 06. rewrite ^/sitemap /action-site-type-map.html permanent; 07. rewrite ^/tag/(.+)$ /action-tag-tagname- $1 .html permanent; 08. rewrite ^/category/technology /category-1.html permanent; 09. rewrite ^/category/tune /category-2.html permanent; 10. rewrite ^/category/tattle /category-3.html permanent; 11. rewrite ^/category/share /category-4.html permanent; 12. rewrite ^/html/([0-9]+)/([0-9]+).html /viewnews- $2 .html permanent; 这样保证了虽然URL更改了,但不会丢失链接,出现404错误找不到该页。请根据原WP自定义URL结构并参考本规则自写规则,每个网站的结构都不同,Apache的Rewrite规则也与此不同,但类似。 十、替换修改临时SS系统URL为原WP的URL 临时SS系统URL为http://temp.,先SS欲替代原系统,必然要把SS的URL修改为http://www.,可以使用官方的SS URL替换工具http://faq./viewnews-196,或者手动修改UC中SS应用URL,修改SS配置文件,再手动进入数据库中使用类似 1. update `supe_spacenews` set `message`= replace (`message`, 'temp.' , 'www.' );这样的SQL语句进行替换。
十一、修改DNS解析A记录到新服务器IP 原www.的A记录为67.220.69.79,现更改www.的A记录到64.71.167.26。等待DNS缓存更新,网站迁移完成。 |
|