考虑到WordPress 3.0支持的多站点(MultiSite)特性,并且本网站需要经常更换服务器而需要将安装的几个独立WP博客合并到一个WordPress安装里,前几天经过仔细探索确定了可能出现的问题,制定了本站点的升级计划并成功实施,目前尚未发现任何问题。特将升级步骤写出来与大家分享。本文讨论的是以子目录(sub-directory)形式启用Network功能,可以作为以子域名(sub-domain)形式启用Network功能的参考。
请大家包涵,这篇文章引用太多了,不过如果不引用,编辑起来太麻烦了,文章太长。而且,如果你知道怎么操作的话就不用看那些引用文章了。
一、背景介绍¶
先介绍一下基本情况,好让大家对我的升级步骤有更好的理解。
本来我的网站有2个WordPress安装,一个是主博客,在/blog目录下(文章较多),一个在/photonics 目录下(文章较少);另外还有一个WordPress MU安装在/blogs目录下(文章较少)。(都是相对于服务器根目录。)
我需要在服务器根目录下安装WordPress 3.0,然后将/blog里的博客导入为其主站点,在建立其它几个站点分别给原来/photonics下的博客和原来WordPress MU里的每个博客。
考虑到原来/blog下的博客文章和设置较多,而WordPress 3.0又支持从WordPress 2.9.2直接升级,并且升级之后还可以开启多站点模式。所以计划从/blog里的那个WordPress安装进行升级,然后将其它几个文章少的博客使用WordPress自带的导入工具导入。(实际上也可以通过导入数据库来导入这些博客,但是考虑到操作数据库比较繁琐(请参考文章 Upgrading / moving WordPress 2.9 installs to multisite WP 3.0),而文章又很少,就直接用这个工具了。)
另外,因为我是将/blog目录下的WordPress博客升级到根目录下的WordPress 3.0主博客,有些地方跟从别的目录如/other或者本来就是根目录下升级到根目录下的操作有些不同,我会在括号([…])中注明,请看仔细,并请在执行前阅读“升级到WordPress 3.0并开启多站点模式时可能出现的问题”。
二、详细步骤¶
1、将/blog ([或者/other]) 里的文件全部复制到根目录 ([如果本来就在根目录则不需要复制])¶
将/blog里的文件复制出来,暂时不动/blog里的东西,可以保证在你进行升级的时候不妨碍原来/blog里的WordPress安装的访问。但是为了做到这一点,还需要将数据库也另外复制一份(如果你所在的服务器只支持一个数据库,恐怕就做不到这一点了,请直接跳到第2步继续下一步操作)。
复制数据库的方法:
- 登录到服务器提供的数据库管理后台,选择原来的数据库进行备份(请参考WordPress中文codex);
- 新建一个数据库,将备份文件导入到新数据库中;
然后:
- 修改刚才复制到根目录的WordPress的config.php文件使之使用新数据库(只需要将数据库名称替换为这个新建的就可以了)。
- 修改这个新建的数据库表 wp_options 中 id=2 的记录 siteurl 的值修改为域名根目录,这里是去掉后面的文件夹路径 blog。如图1 和图2。
- 登录这个复制的WordPress的管理后台(如果你以前没有修改别的东西,直接访问自己的域名应该就可以打开这个复制的博客),并修改“设置(settings)——>一般设置(General)”中的博客地址为新地址(域名,即去掉原来的目录路径)。此时你会发现已发表的文章路径中的/blog ([或/other])已经不见了,WordPress已经自动更新了链接地址,但是文中的引用本博客的地址并没有更新,暂时不用管它。
现在就有了一个位于根目录的原来的博客的备份。下面的操作将针对这个备份,以防止丢失以前的数据。([另外,如果本来就安装在根目录,请在操作前备份数据库和全部网站文件,以备不时之需。])
2、使用WordPress 3.0文件覆盖全部复制的这个WordPress的文件并执行升级¶
使用新版本WordPress 3.0的文件覆盖原WordPress的这一步相当于我们以前执行的手动升级WordPress的操作,请参考WordPress中文codex。
文件上传完毕后可以直接打开这个基于新版本WordPress的博客,但是还需要登录到其管理控制台升级数据库。登录后会有页面提示升级,直接点击链接进行升级即可,完成后点击“Complete update”就完成了升级工作。
3、开启 WordPress 3.0 多站点(MultiSite)功能¶
请参考我的另两篇文章:试用WordPress 3.0 和 WordPress 3.0 放出RC1版本。其中也提到了中文化的问题(目前的RC版本没有中文语言包)。
特别提示:
- 请在开启WordPress 3.0多站点功能前先禁用所有插件。
- 因为是从原来的博客升级而来,需要强制WordPress 3.0以子目录形式安装多站点功能,原因请参考“升级到 WordPress 3.0多站点模式问题探索”。
默认安装并没有开启多站点(MultiSite)功能。要开启此功能,需要编辑 wp-config.php
文件。可以在 /* That's all, stop editing! Happy blogging. */
之前增加下面语句:
/* multisite settings */ define(‘WP_ALLOW_MULTISITE’, true);
然后就能在管理员控制面板的 Tools –> Network 下进行多站点安装和设定了。
4、登入后台进行必要的设置¶
比如重新启用插件、设置永久链接(Permalink)等。
如果将这里的永久链接设置的形式跟之前升级而来的博客的永久链接形式一样,可以为后面减少一些麻烦。
但如果你固执地要更改 permalink 形式也不是不可以,我就这么做了。当然,你也可以等到全部完成之后再来改这个永久链接,没必要一下子做太多事情,搞得自己手忙脚乱。呵呵,我已经尝试过了。请参考“安全修改 WordPress 网站永久链接形式”。(呵呵,准备写,估计明天可以发出来)
5、修正分类 Category 页面和标签 Tag 页面的固定链接¶
升级到多站点模式之后,有些地方的固定链接发生了变化,需要手动修订。
- a、如果原来是 /blog 目录下的安装,原来的分类页和标签页的固定链接是
cnzhx.net/blog/category/… cnzhx.net/blog/tag/…
的形式(仍是以我的操作为例)。此时为了保持链接不变,只要在管理控制台的“设置(settings)——>永久链接(Permalink)”页面进行相应设置即可。如下图,给 Category 和 Tag 分别加上相应的根路径。这样一来, Category 和 Tag 的路径就跟原来在 /blog 下的安装一样了。
- b、如果原来是 /other 目录下的安装,则原来的链接分别是
cnzhx.net/other/category/… cnzhx.net/other/tag/…
此时应该先进行类似 a、中提到的操作,然后在 .htaccess 文件或者 vhost.conf 中设置 301 跳转:
# change blog dir #其中后面的/blog路径是WordPress 3.0默认的主博客的路径 Redirect 301 /other/category /blog/category Redirect 301 /other/tag /blog/tag
将上面的代码中的 other 修改为你之前的 WordPress 安装路径,然后将该代码加入服务器根目录下的 .htaccess 文件中靠前的位置(必须在 WordPress 重写规则代码前面)即可。
- c、如果原来是根目录安装,则原来的链接分别是
cnzhx.net/category/… cnzhx.net/tag/…
此时仍然应该先进行类似 a、中提到的操作,然后在 .htaccess 文件或者 vhost.conf 中设置 301 跳转:
# change blog dir #其中后面的/blog路径是WordPress 3.0默认的主博客的路径 Redirect 301 /category /blog/category Redirect 301 /tag /blog/tag
将该代码加入服务器根目录下的 .htaccess 文件中靠前的位置(必须在 WordPress 重写规则代码前面)即可。
特别提示:
虽然这一节里提到的每次设置的301跳转的代码形式差不多,但是却不能简单的以类似于下面
Redirect 301 /other /blog
的形式替代,否则会影响到文章链接的解析。
6、修正静态页面 page 页面的固定链接¶
类似于上面的第5步。
原来的页面链接形式为 http://yourdomain.com/blog/top-pageurl/second-level-page/...
,改为现在的安装后,页面链接形式为:http://yourdomain.com/top-pageurl/second-level-page/...
。同样可以通过在根目录的.htaccess文件中设置301跳转来更正链接地址。并且你需要为每个顶级页面(top-pageurl)设置一个对应的跳转(次级及以下的页面(second-level-page等)就不用设置了)。例如:
# 301 redirect old pages to new pages redirect 301 /blog/top-page-url1/ /top-page-url1/ redirect 301 /blog/top-page-url2/ /top-page-url2/ … #有多少写多少,不过,应该不是很多吧?
将该代码加入服务器根目录下的 .htaccess 文件中靠前的位置(必须在 WordPress 重写规则代码前面)即可。
7、修正附件链接地址¶
相信很多人会在博客中上传图片等附件,如果你的附件是通过WordPress编辑器上传的,那么默认是存储在/blog/wp-content/uploads/中的([或者 /other/wp-content/uploads/,或者/wp-content/uploads/中])。跟8的方法一样,需要设置301跳转([/wp-content/uploads/的那个就不用设置跳转了,位置没变])直接给出结果:
# 301 redirect old attachments to new attachments redirect 301 /blog/wp-content/uploads/ /wp-content/uploads/
([ 或者
# 301 redirect old attachments to new attachments redirect 301 /other/wp-content/uploads/ /wp-content/uploads/
])
8、通过操作数据库更新文章中引用的原博客内容和附件的链接地址¶
文章中引用的原博客内容我们往往都会给出链接让读者可以直接点击,这就会产生一个html代码段,其中包含了原博客中内容的链接地址,这个地址不会自动更新,需要通过数据库操作进行更新。同时,原来的文章中的附件也有类似的地址,也需要更新。更新方法请参考文章“blog域名迁移之迁移wordpress”,更新URI的方法是一样的。
当然,不更新的话不会影响访问,因为我们前面已经设置了301跳转。可是既然有方法更新,何必让服务器每次碰到这样的东西都跳转一下呢,那是要花时间的,不管这个时间有多短。
9、完成!¶
到这里基本上就已经完成了升级过程了,其它一些细枝末节的设置问题我就不多啰嗦了。剩下的几个博客都是利用WordPress的导入功能导入的,没什么好说的,如果非要看看我是怎么做的,请参考“升级到 WordPress 3.0多站点模式问题探索”。
后记:¶
虽然文中引用了很多之前写过的文章,虽然有我前两天升级过程中用Word做的笔记做支撑,编写这篇文章还是花了我 4 个多小时的时间。今天晚上全搞这个了。©
本文发表于水景一页。永久链接:<https://cnzhx.net/blog/upgrade-to-wp30-multisite-subdirectory/>。转载请保留此信息及相应链接。
引用通告: 强制WordPress 3.0以子目录形式安装多站点功能 « 不存在的空间
引用通告: 安全修改WordPress网站永久链接地址形式 « 不存在的空间
引用通告: Tweets that mention 升级至WordPress 3.0多站点模式 « 不存在的空间 -- Topsy.com
引用通告: 预加载(Preload)WP Super Cache缓存 « 不存在的空间
引用通告: Google XML Sitemaps与WordPress 多站点(Multisite) « 不存在的空间
引用通告: 修正WordPress相关文章插件Efficient Related Posts的set_time_limit错误 « 不存在的空间
引用通告: 自动升级WordPress和其插件 « 不存在的空间
引用通告: 升级到WordPress 3.0多站点模式问题探索 « 不存在的空间
主题不错,欢迎到我的论坛,很多主题下载。http://www.alibibi.info
WP主题交易论坛
谢谢!需要的时候我会去看看的。
引用通告: WP Super Cache 1.0 更新及问题 | 水景一页
引用通告: 完全兼容 WordPress 多站点模式的站点地图插件 | 水景一页
引用通告: 多站点模式 WordPress 启用更新通告服务 | 水景一页
引用通告: WordPress 3.4.1 发布 | 水景一页
引用通告: WordPress 站点通过 robots.txt 限制百度索引范围 | 水景一页
引用通告: WordPress 3.5.1 维护与安全更新 | 水景一页
引用通告: 快速访问和修改 WordPress 选项 | 水景一页