在Wordpress中文论坛上曾看到一网友的帖子, 讨论如何建立博客镜像的问题。要求不同地址的WP博客可以显示同样内容,其中一个博客负责帖子的管理,而镜像博客只负责内容输出。既然要求是镜像,所有内 容都需自动完成,所以利用Live Writer等编辑软件分开发布等手法都不属于讨论范围之内。稍微分析一下,实现博客镜像并非不可能,其中涉及二个方面的问题。 

一是数据库问题。因为Wordpress的主要内容和配置都放置在数据库内,而页面内容都是动态查询数据库生成的。所以只要能够共享到数据库。镜像问题就可以解决了。

二是永久链接问题。因为主博客和镜像博客的地址是不一样的,所以要求Wordpress博客内的文章,目录,页面等浏览用的永久链接都是根据各自的地址动态生成的。而正因为WP的链接是动态生成的特性,如果能有效利用的话,此问题也就不再是问题了。

我个人对建立博客镜像并不以为然,然而作为WP的Fan,从技术方面探讨其可行性倒是蛮有兴趣。在论坛上看此讨论后,我在本地做了个测试,结果发 现,仅需简单地利用wp-config.php对相关选项定义后,完全可以实现二个博客之间的同步。下文中将以主博客和镜像博客用以区分二个博客。

前提

根据上面分析的二个方面,要实现镜像,假设下列前提都必须得以满足。 

1. 数据库可以共享。镜像博客必须共享主博客的数据库,所以在wp-config.php中,二者对应的数据库名,帐号和密码必须完全一致。如果镜像博客和主博客位于同一主机上的话,也不存在数据库地址的问题了,(通常都为localhost)。若二者位于不同主机,主博客的数据库必须支持远程登录,否则的话就无法实现镜像。

2.为了保持一致,镜像博客的wordpress目录结构和文件必须完全和主博客一致。即模板文件,插件文件以及.htacess文件必须全部一样。但因为WP是用绝对地址来设置文章中图片和附件等,所以镜像文件可以不需要建立那些在主博客中保存图片或附件的目录。通常是\wp-content\uploads。

步骤 

1. 建立镜像博客,将wp文件上传到镜像博客的wp目录,然后将主博客中使用的模板以及插件分别上传到镜像博客的相关目录下。注意,目录结构和模板插件文件必 须相同。我是用xampp搭建本地服务器,然后在本地调试的,在本地下分别建立了wp251和mirror目录,使用wp官方2.5.1版程序。前者的 url为:http://localhost/wp251,设定为主博客。后者url为:http://localhost/mirror,作为镜像博客。

用phpmyadmin建立一个数据库wp251,并将现有ThinkAgain博客的数据备份导入。

2. 设置wp-config.php 

用文本编辑软件如notepad++打开主博客wp251的wp-config.php,设定其数据库参数和定义wp和博客的绝对地址。如下图,点击可查看大图:

主博客wp-config.php部分内容

设定主博客的数据库为wp251,用户名和密码为root和123456,定义了主博客的wp安装目录的绝对地址(WP_HOME)为http://localhost/wp251;博客的地址(WP_SITEURL)为http://localhost/wp251注:主博客可不定义wp地址和博客地址。 

接着编辑镜像博客mirror的wp-config.php,如下图:

镜像博客的wp-config.php部分内容

可以看出,该wp-config.php将镜像博客的数据库设定为和主博客一样,均为wp251,用户名和密码为root和123456。也就是说镜像博客将共享使用主博客的数据库,这是问题一的解决方法。 

但注意定义了镜像博客的wp地址为http://localhost/mirror;博客的地址为http://localhost /mirror。这是其不同之处。由于WP_HOME和WP_SITEURL是全局变量,这样即使数据库中的定义的WP安装和博客地址为http: //localhost/wp251,而Wordpress在运行中将会使用http://localhost/mirror来生成永久链接。这样就解决 了问题二。

通过wp-config.php指定二者的位置后,在后台的设置页面可以发现,这二个选项将会以灰色显示,无法编辑。

镜像博客后台

p.s,wp安装目录和博客目录分别被保存在数据库中wp_options表的第40项,在wp_options第1项。

3.更新.htacess文件

即使已经将主博客的.htacess上传到镜像博客的wp根目录下,仍需要到镜像博客的后台重新更新下永久链接。注,无需修改链接格式,仅点击更新按钮即可。 

4.查看效果

分别打开主博客或镜像博客的页面,对照下面2个抓图,可以看到二者界面和内容完全一致。但地址和链接等是不一样的。图中红色方框处。

主博客抓图

主博客抓图

镜像博客抓图

镜像博客抓图 

只要在镜像博客\wp-content\plugins下上传有相同插件。镜像博客也可以完全正常使用插件。上图右边红色方框处是插件生成的代码,这个是我的wp_addbookmarks插件生成的。新添加了半透明的css效果。

到此为止,二个网站已经基本实现同步了。无论是在线或者利用离线编辑软件如live writer等往主博客发表文章后,镜像博客将会立即输出同样内容。因为它们共享同一个数据库来输出内容的。

可以在主博客管理博客的设置,因为共享数据库,所以所做的设置更改也会立即在镜像博客上有效。如果涉及文件修改等,请务必修改镜像博客中的相应文件 

讨论-可能存在的问题

即使成功地将二个博客同步,但仍可能存在些问题。主要为插件方面的兼容性问题。因为插件的涉及面太广,所以我没有去测试过,只能在这里提出一些来互相探讨。

1. 一些涉及永久链接管理的插件,如链接转向,或自定义链接等插件可能无法正常运行在镜像博客上。 

2. 博客的统计问题,涉及博客统计的插件,如postview等,将会同时统计二个博客的页面浏览状态,所以在页面显示的浏览量等为主博客和镜像博客的浏览量的总和。

3. 涉及数据库读写或管理的插件可能会不正常。按理来说,虽然镜像博客的插件在运行中会往数据库中写东西不会影响到主博客的运行,但是要注意,如果往数据库内写入含有站点永久链接的内容,那么将会出现问题。因为二个站点的永久链接是不一样的。而数据库内使用同样的永久链接,会造成链接指向絮乱。

4.RSS输出问题,二个博客的rss内容虽然一样,但是需注意主博客和镜像博客的wordpress默认的输出feed地址是不一样的。所以如果 在模板中调用wp自带函数用于rss订阅地址输出的话,可能会导致分散了订阅者。这个问题可以通过整合feed地址来解决。将主博客的feed地址提交给 feed管理的站点,如feedburner或feedsky,然后在模板中只放置feed管理站点提供的整合后feed地址就可以了。 

本文是我根据本地测试的结果总结出来的。用于抛砖引玉,实际建立远程镜像的步骤大同小异,但涉及具体的问题,如插件等,需要根据自己的实际情况而定后再分析解决。为此,建议先在本地测试下,然后再做定夺。 :razz:


转载文章请注明转载自:ThinkAgain - Let's Blog!

引用地址:http://www.thinkagain.cn/archives/915.html