2010/02/06

MediaWikiで地獄のリダイレクトループ→ver 1.6.12のLocalSettings.phpはPHP5と一部互換性がない?

備忘録として.

MediaWikiでちょっとした情報ページを自作しているが,ある時サーバ(ロリポップ)がMySQLとPHPのバージョンを上げたので(どちらも4→5),自作ページもアップデートした.

すると,その直後でもないのだが,数時間後から突如として全てのページが表示されなくなった.
Firefoxだと,
ページの自動転送設定が正しくありません.このアドレスへのリクエストに対するサーバの自動転送設定がループしています.

という非情なメッセージが現れる.
じょーだんじゃない.

慌ててindex.php,localsettings.php,redirect.phpなどを見てみるが,どこにバグがあるのか分からない(PHPコードを書けないんだから分からなくて当たり前).

MediaWikiをバージョンアップさせると良いだろうかと考えてみたり,でもレンタルサーバだからデータの完全なバックアップも難しく迂闊なことは出来なさそうだし,と丸1日他の情報を検索.
しかし完全に手詰まり.

仕方がないから出来るだけのバックアップをとった後に,腹を括ってMediaWikiの同じバージョンを上書きインストールしてみた.インストールのダイアログには以前と同じ全く同じ内容を書き込んだ.
するとインストールが完了した瞬間に「以前のMediaWiki用データベースを発見」とメッセージが出て…….

無事に復旧完了!
地獄のリダイレクトループも消滅!

あー良かった,と一件落着.

ところがすぐにURLがおかしいことに気付く.
異常が起きる前のURLは,Wikipediaと同じく,
http://hogehoge.com/hoge/index.php/メインページ
だったのが,復旧後は,
http://hogehoge.com/hoge/index.php?title=メインページ
になっている.いわゆるugly URLというやつだ.

別に閲覧動作に問題はないので支障はないのだが,何となく格好悪い.

そこでMediaWikiのページを参考にしてこの方法を試してみた.
  1. 言われるがままの.htaccessファイルを作成してMediaWikiのディレクトリに置く
  2. LocalSettings.phpの当該部分を指示通りに書き換える(デフォルトでコメントアウトされている箇所を正規にし,逆に正規部分をコメントアウト)
すると……,
地獄のリダイレクトループ再現!!
何じゃそりゃああああああああああ!!!!!!!

面食らいましたね.
そこでもう一度このページの「In LocalSettings.php」の書き換え方をよーーく読み返す.

## If using PHP as a CGI module, use the ugly URLs

$wgArticlePath = "$wgScriptPath/$1";
ふむふむ,で俺のLocalSetting.phpは?
## If using PHP as a CGI module, the ?title= style usually must be used.
$wgArticlePath = "$wgScript/$1";  ←コメントアウト解除
# $wgArticlePath = "$wgScript?title=$1";  ←こちらをコメントアウト
ふむふむ,間違ってないじゃないか……え???

## If using PHP as a CGI module, the ?title= style usually must be used.
$wgArticlePath = "$wgScript/$1";  ←コメントアウト解除
# $wgArticlePath = "$wgScript?title=$1";  ←こちらをコメントアウト
あれ?で,正しくはどうあるべき?

## If using PHP as a CGI module, use the ugly URLs

$wgArticlePath = "$wgScriptPath/$1";
 あれーーーーー?????「$wgScript」と「$wgScriptPath」じゃ違うぞ?????
そこで自分のLocalSettings.phpをさらに修正してみた.

## If using PHP as a CGI module, the ?title= style usually must be used.
$wgArticlePath = "$wgScriptPath/$1";  ←さらに修正
# $wgArticlePath = "$wgScript?title=$1";
すると…….
地獄のリダイレクトループは消滅し,ugly URLが美しいshort URLに!!
ついでに言うと,short URLは復旧前よりも更に短くなってくれていた.ありがたや.
復旧前: http://hogehoge.com/hoge/index.php/メインページ
復旧後: http://hogehoge.com/hoge/メインページ
PHPコードをまともに理解しないまま適当にやっただけの結果だが,推測するに,
MediaWiki 1.6.12が生成するLocalSettings.phpはshort URLに関してPHP5と互換性がないんじゃないか?
という怪しい結論になった.

ということは最初のリダイレクトループも再インストールなんかしないで「$wgScript」を「$wgScriptPath」に書き換えるだけで解決していたのかも知れない.

ともあれ結果オーライ (← きちんとPHP勉強しろよ).

0 件のコメント: