残像ブログ

残像だった

MediaWikiのURLをWikipediaみたいに単純にする

mediawikiのURLはインストール時の設定だと「〜/wiki/index.php?title=ページ名」のようになる。
?とか=を無くして「〜/wiki/ページ名」などのように単純なURLに書き換えるのが慣例らしい(Wikipedia等)。
せっかくなので自分のwikiもそうする事にした。

設定方法はサーバソフトの種類や専用サーバかどうかなどによって違うみたいなので注意。
私の環境はApache(さくらのレンタルサーバ(スタンダード))です。

書き換え方法の概要

ApacheでURLの書き換えをするにはmod_rewriteというApacheモジュールが有効になっている必要がある(この有効無効設定はサーバ管理者でないとできない)。
さくらのレンタルサーバでは有効になってました。

有効になっているならhttpd.confや.htaccessなどの設定ファイルにルールを設定して書き換えを行う。
httpd.confはサーバの基本設定ファイルなので普通はサーバの偉い人(管理者)しか編集できないみたい。レンタルサーバでは我々ユーザはhttpd.confは編集できないので、その場合.htaccessに設定を書く。ただし処理が重くなる(あきらめる)。

以下のように書き換える例を考える。

変更前
http://ドメイン名/testwiki/index.php?title=ページ名
変更後
http://ドメイン名/wiki/ページ名

(本当は変更後の「wiki」の部分は「testwiki」のままにしたかったんだけど、変更しないとどうもうまくいかなかったので今回は変更する事にした。いつかきっと調べる)

今回の場合変更が必要なのは.htaccessとLocalSettings.phpの2ファイル

.htaccessへの設定

「www/testwiki/」にmediawikiをインストールしている場合、「www/.htaccess」に設定を記述する(testwikiディレクトリの中ではなくtestwikiディレクトリと同じ階層に.htaccessを置くということ)。

.htaccessに以下の設定を記述する。

RewriteEngine On
RewriteRule ^/?wiki(/.*)?$ %{DOCUMENT_ROOT}/testwiki/index.php [L]

1行目、RewriteEngineをOnにすることでURLの書き換えを有効にしている。
2行目に書き換えルールを記述している。

2行目の記号がゴチャゴチャしてるのは正規表現で書かれてるから
半角スペースを挟んで左側の条件(^/?wiki(/.*)?$)に該当するURLを訪れると、ブラウザは右側のURL(%{DOCUMENT_ROOT}/testwiki/index.php)のページを表示する。しかし、URL欄に表示されるURLは左側の値のままということらしい。
なお[L]は、定義の最終行(Last)という意味とのこと。

LocalSettings.phpへの設定

以下の設定を追加(多分上の$wgScriptPathはもう記述済みだと思う)

$wgScriptPath = "/testwiki";
$wgArticlePath = "/wiki/$1";

wgScriptPathはwikiのベースになるアドレス。インストール時にMediaWiki本体を格納したディレクトリのパスがセットされてるはず。

wgArticlePathMediaWikiでの内部リンクのURLのベースになる。デフォルト設定だとこれが「/index.php?title=$1」のようになっているので短縮したい内容に書き換えている。
なお「$1」には要求したページのタイトル(「メインページ」とか)が入る。

これによりwiki内のリンクは全て短縮版URLになり、また外部サイトからくる時に短縮版URLを要求すれば.htaccessの設定により内側ではindex.phpが呼び出される。
URL欄には短縮版URLが表示されたままなので使う側は短縮版を本来のURLのように見れる。

ということかなあと予想した。