ele_eel's diary

プログラムの事を少しと、デジタル系買物記。

さくらサーバで Kohana 3 を動かす

さくらインターネットレンタルサーバでは、ビジネス用の最上位コース(ビジネスプロ)以外の PHP は CGI モードで動作することになります。このため思わぬ制限があったりして、よくはまります。

Kohana 3 を動かす上で一番困ったのが、URLリライトの方法。そのままインストールすると、例えば、example.com/index.php/home のようにどうしてもURLに index.php が入り込みます。htaccess であれこれ試してみてもダメ。なんとか解決したのでその方法。

実は Kohana 2 でもちょっと工夫をしないとURLリライトができません。そのやり方を応用します。
まず application/bootstrap.php を変更します。どうやら CGI モードだと環境変数 $_SERVER['PATH_INFO'] が取得できないようです。なので、

<?php

/**
 * Execute the main request using PATH_INFO. If no URI source is specified,
 * the URI will be automatically detected.
 */
//$request = Request::instance($_SERVER['PATH_INFO']);

//このように GET で取得するようにする
$request = Request::instance($_GET['path_info']);
//こんな感じに本サーバ定数で振り分けるといいかも
$request = IN_PRODUCTION ? Request::instance($_GET['path_info']) : Request::instance($_SERVER['PATH_INFO']);

というふうに修正します。
次に htaccess を

# Rewrite all other URLs to index.php/URL
#RewriteRule .* index.php/$0 [PT]
# 上記の変数を GET でindex.phpに渡します。
RewriteRule ^(.+)$ /index.php?path_info=$1 [PT,L]

これでさくらサーバで Kohana 3 のURLがすっきりするはず、です。