ラベル PHP の投稿を表示しています。 すべての投稿を表示
ラベル PHP の投稿を表示しています。 すべての投稿を表示

2012/02/22

ロリポップにインストールしたMediaWikiのshort URL設定法

幽霊ブログと化していますが,本エントリーは完全に自分向けの備忘録で,引き続き幽霊です.m(_ _)m

■ロリポップにインストールしたMediaWikiでshort URLを設定する方法(ugly URLをなくす方法)

とりあえず公式マニュアルのこちらを参照.
Manual:Short URL/ja
 で,ロリポップの契約ではrootインストールではなくサブディレクトリインストールで,
PHPはCGIモジュール作動なので,上記ページ内の下記リンクに飛ぶ.

Example.com/wiki/Page_title

作成方法: example.com/wiki/Page_title ウェブページアドレス

このページに書かれている通りにする.
  1. 「example.com/wiki/LocalSettings.php」を書き換える
  2. 「example.com/wiki/」に新たなテキストファイル「.htaccess」を作成,置く

1. 「example.com/wiki/LocalSettings.php」の書き換え
同ファイルをテキストエディタで開き,下記のような箇所を見つける(割と上の方にある).
## The URL base path to the directory containing the wiki;
## defaults for all runtime URL paths are based off of this.
## For more information on customizing the URLs please see:
## http://www.mediawiki.org/wiki/Manual:Short_URL
$wgScriptPath       = "/wiki";
この直下に下記の3行を書き加えて保存する(自分向けに分かりやすく注釈行を入れると尚良い).
$wgScript           = "$wgScriptPath/index.php";
$wgRedirectScript   = "$wgScriptPath/redirect.php";
$wgArticlePath      = "$wgScriptPath/$1";

2.「example.com/wiki/」に「.htaccess」を作成
 テキストエディタに下記の4行を入力し,ファイル名「.htaccess」として「example.com/wiki/」に保存する.
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^wiki/(.+)$ /wiki/index.php?title=$1 [L,QSA]

上記2つの作業を行って再度ブラウザから「メインページ」にアクセスするとugly URLが消えてshort URLになっている.


補足:
2年前にこんな苦労をしたことをすっかり忘れていた.
MediaWikiで地獄のリダイレクトループ→ver 1.6.12のLocalSettings.phpはPHP5と一部互換性がない?


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勉強しろよ).