MediaWiki建博客尝试

2015年1月3日

承接《博客标记语言的思考》,因为latex、维基代码都可以写博客,而且Mediawiki的模板功能实在很好用,所以先前有稍微评估了一下MediaWiki建博客网站的可能性。博客的一个重要功能是能让访客评论,我发现MediaWiki有Comments扩展程序能实现这个功能,于是趁圣诞节假期部署了Mediawiki。本文总结一下这次尝试。

我的运行环境是Windows+IIS+MySQL。用Web平台安装程序安装MediaWiki挺顺利的。MediaWiki社区建议把MediaWiki安装在/w。然后我想要设置url重写,生成短链接。这里我参照了Manual:Short URL/IIS7,就是把/wiki/首页重写成/w/index.php?title=首页。但是设置好后我访问/wiki/首页就会产生循环重定向的错误。我访问/wiki/首页,服务器返回301状态,新位置是/wiki/首页。这就是循环了。

我网上搜了很多,没搜到;也在MediaWiki社区问了,竟然没人回答!!!我配置了一台全新的虚拟机,仍然可以重现此错误,这似乎说明URL重写后循环重定向的错误是在Windows+IIS平台上普遍的错误,竟然MediaWiki社区没人回答,不可能没人知道吧?

我自己调试了一下,发现问题出在includes/WebRequest.php的getPathInfo方法,里面有

$url = $_SERVER['REQUEST_URI'];

我对PHP和IIS都不熟,但觉得URL重写应该是把HTTP请求头里的路径重写,再处理重写后的HTTP请求头,所以应用程序收到的HTTP请求路径应该是重写后的路径。但是以上代码返回的URL竟然是重写前的路径,即/wiki/首页。由于这不是MediaWiki的内部表示形式,相当于index.php没有收到title的参数值,所以没有title,就重定向到首页。——这就是循环重定向的原因。

我的修改就是在以上代码之后,“再一次”重写URL,写成MediaWiki的内部形式。

if(substr( $url, 0, 6 )==='/wiki/')
$url='/w/index.php?title='.substr($url,6);

这里/wiki/是重写前的url,/w/是MediaWiki程序的所在文件夹。简单测试了一下,代码似乎可用;但不保证没有其他后遗症!

不过,在我的服务器上MediaWiki运行很慢,打开首页就要20秒。经测试,Windows 2008系统中,运行MediaWiki需要内存2.2G;我的服务器内存只有1G。我的服务器上跑Wordpress还是比较顺的,所以看起来MediaWiki比Wordpress更耗资源。

MediaWiki用<math>标签显示数学公式,需要服务器端Latex程序的支持。MediaWiki还需要用GNU Diff等其他很多程序支持其他功能,比wordpress大多了!

所以说,在把服务器内存升级到2G之前,MediaWiki好像用不了。