在 Windows IIS 6 上配置 WordPress

今天帮助一位同事把 WordPress 博客从一个 Linux 服务器上迁移到租用的一个运行 IIS 6 的 Windows 2003 服务器空间上。由于是租用空间,所以能配置的东西有限。在安装和配置 WordPress 2.3.2 时遇到了一些困难;经过摸索和 google 搜索,最后迁移成功。

首先,在 Linux 服务器上:

1、通过 WordPress Admin Panel,把以前的文章、评论和页面 Export 成一个 XML 文件。
2、把 wordpress 下所有文件打了个 ZIP 包 wordpress.zip。

然后:

3、把 wordpress.zip 展开并传递到租用的 Windows 服务器的个人空间的 blog 子目录下。
4、修改租用空间的参数,添加 index.php 作为缺省主页之一。
5、修改 wp-config.php,设置相应的 MySQL 参数。
6、通过浏览器运行 http://www.picksth.com/blog/ 配置 WordPress。
7、在 WordPress Admin Panel 里,Import 刚才保存的以前的文章、评论和页面。
8、修改其他配置:如基本信息、插件等。

在修改永久链接时,发现这个 IIS 6 只支持下列形式的永久链接:

http://www.picksth.com/blog/index.php/2008/01/25/softfix/

就是说,这个 IIS 6 不支持 mod_rewrite,但是幸运的是,它支持 PATH_INFO。虽然不喜欢多一个 index.php/,但是由于租用空间的配置限制,也只能如此了。

以上配置完毕后,WordPress 基本工作了。但是,发现了两个严重问题:

1、原来永久链接含有中文字符的文章、分类和标签统统不灵了,总是显示 not found。
2、标签云显示的标签全是编号了。

对于第一个问题,一开始不知道是什么原因。同事只好决定手工甚至所有的 slug 为英文。就在这项工程快完工时,我在 google 上搜索到这个帖子,按照其中的介绍,修改了 wp-includes/classes.php,把第 44 行开始的几行略做修改,修改前的代码:

			if ( isset($_SERVER['PATH_INFO']) )
				$pathinfo = $_SERVER['PATH_INFO'];
			else
				$pathinfo = '';
			$pathinfo_array = explode('?', $pathinfo);
			$pathinfo = str_replace("%", "%25", $pathinfo_array[0]);
			$req_uri = $_SERVER['REQUEST_URI'];

修改后的代码:

			if ( isset($_SERVER['PATH_INFO']) )
				$pathinfo = mb_convert_encoding($_SERVER['PATH_INFO'], "UTF-8", "GBK");
			else
				$pathinfo = '';
			$pathinfo_array = explode('?', $pathinfo);
			$pathinfo = str_replace("%", "%25", $pathinfo_array[0]);
			$req_uri = mb_convert_encoding($_SERVER['REQUEST_URI'], "UTF-8", "GBK");

修改之后,果然 IIS 6 也可以支持中文的 URL 了!

对于第二个问题,没有找到解决方法;只好把所有文章的标签重新编辑一遍,其后页面的标签显示就正常了。

从这次迁移的过程看,Apache 和 IIS 在诸多方面还是很不一样的。所以,迁移是个体力活哦!轻易不要迁移!


留下评论