MediaWiki 是目前很流行的一個 Wiki Engine,例如最有名的 Wikipedia 就是以 MediaWiki 作為網路大百科的程式。許多人安裝完 MediaWiki 之後,希望能夠像像 Wikipedia 一樣使用漂亮的網址(Pretty URL),卻會發現不是很好設定,本篇就是我今天試出來的一些經驗,給大家參考。

什麼是漂亮的網址呢?就像是 http://en.wikipedia.org/wiki/Republic_Day 相對於 http://en.wikipedia.org/w/index.php?title=Republic_Day;前者由於沒有使用問號,而且是採用階層式的方式表示其內容,一般來說我們稱這種網址比較漂亮或是簡潔。使用這種網址的好處另有專文討論,這裡先來討論在 MediaWiki 要怎麼做。

假如你已經設定好你的 MediaWiki,那麼你的 LocalSettings.php 會是你的主要設定檔;在這個檔案中,有幾個變數是和 Pretty URL 相關的,請找出以下設定並把設定改為如下,;

$wgScriptPath = “/mediawiki”;
$wgScript = “$wgScriptPath/”;
## If using PHP as a CGI module, use the ugly URLs
$wgArticlePath = “$wgScript$1″;
# $wgArticlePath = “$wgScript?title=$1″;

其中,$wgScriptPath 代表你的 mediawiki 的網址,所以如果你想改成 http://ooxx.com/wiki/,那就在那一行修改;請注意 ‘/’ 擺放的位置,若您多放或少放都可能會造成設定錯誤。

接下來,設定你的 Apache Rewrite;關於安裝 Apache Rewrite Engine,也不在本文討論的範圍,請參考相關文章

在你的 httpd.conf 或是 .htaccess 中加入以下 RewriteRules:

RewriteEngine On
RewriteBase /mediawiki

RewriteCond %{REQUEST_URI} !^/mediawiki/$

RewriteCond %{REQUEST_URI} !^/mediawiki/(stylesheets|images|skins)/
RewriteCond %{REQUEST_URI} !^/mediawiki/(redirect|texvc|index).php

RewriteCond %{REQUEST_URI} !^/mediawiki/error/(40(1|3|4)|500).html

RewriteCond %{REQUEST_URI} !^/mediawiki/favicon.ico

RewriteCond %{REQUEST_URI} !^/mediawiki/robots.txt

RewriteCond %{QUERY_STRING} ^$ [OR] %{REQUEST_URI} ^/mediawiki/Special:Search
RewriteRule ^(.*)$ /mediawiki/index.php$1 [L]

同樣的, “mediawiki” 可以改成你在 LocalSettings.php 中的設定,不過請注意不要更動先後順序。

這裡的 Rewrite Rules 大致是這樣運作的:

1) 第一個 RewriteCond 處理 /mediawiki/?title=ooxx 這狀況,在這種狀況下不需要 Rewrite;
2) 第二個 RewriteCond 跳過圖檔和 CSS 等靜態資料;
3) 第三個 RewriteCond 跳過 index.php, redirect.php 和 texvc.php,對這幾個檔案的 request 不需要 Rewrite;
4) 第四和第五個 RewriteCond 分別略過 favicon.ico 和 robot.txt。
5) 保留搜尋的字串,其於的 Query String 清空;
6) 把其他的 Query 傳給 index.php

如此就完成了。

測試時,下列四者應該都可以正常運作才行。
1) 是否可以正常在不同頁面連結
2) 是否可以編號內容(請注意存檔結果是否正確)
3) 是否可以正常 Login/Logout
4) 是否可以搜尋。

如果發現設定上有問題,不妨先檢查一下 Apache 的 Rule 設定;假如有使用 Alias 的話,請確定
網址後沒有加上 ‘/’, 而目錄後有加上 ‘/’,如下:

Alias /mediawiki /home/www/mediawiki/