mod_fcgid + mod_userdirなURLにてCodeigniterのURL設定をうまく実現する

CodeIgniter の URL : CodeIgniter ユーザガイド 日本語版の設定を、mod_userdirで設定されたユーザディレクトリ以下に設置されたCodeIgniterに対してうまく実現する方法のメモ。なお、PHPはmod_fcgidでCGI版を動作させている。モジュール版PHPを使っている場合はまた事情が違うかも。

たとえば、http://example.com/~username/myapp/hoge/fugaのようなURLをhttp://example.com/~username/myapp/index.php/hoge/fugaへのアクセスに変換したい。このような場合、次のような設定をするとよい。

.htaccessにRewriteBaseを追加する

RewriteBaseなし(デフォルト)だと、/がprefixとして扱われるため、書き換え後のURLがhttp://example.com/index.php/hoge/fugaのようになってしまう(/myapp/~userdir/が抜けている)。

RewriteBase /~username/myapp/

のように設定することで、想定通りのURLへリダイレクトされる。

CodeIgniterのURI Protocol設定値を'QUERY_STRING'にする

URLの書き換えは前述の設定でうまくいくが、今度はmod_fcgidにて「No input file specified.」なエラーになってしまう。有名な問題らしく少し検索したらいろいろと出ていたが、時間もないのでこのように対応。config.phpのURI Protocol設定を

$config['uri_protocol'] = "QUERY_STRING"

のようにし、.htaccessのRewriteRuleを

RewriteRule ^(.+)$ index.php?$1 [L]

のようにした(index.phpの直後の/を?に変えた)。

とりあえずはこれで解決。