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の直後の/を?に変えた)。
とりあえずはこれで解決。