CodeIgniter はじめてみた4 ~本番環境~

リニューアルとはいえ、サイトが丸2日で完成した。

フレームワークさまさまである。

さて、開発が終わったら次はステージングとかに移行するべきなのだが、個人の趣味開発なのでその辺はすっ飛ばすことにした。

が、もちろんぶっつけ本番でうまくいくとは思っていないし、わずかながら利用者がいるかもしれないようなサイトなので、ちょっとだけ細工をすることにした。

細工と言っても index.php のファイル名を test.php にしただけ。

これにあわせて、 .htaccess も 若干修正する必要がある。

<IfModule mod_rewrite.c>
RewriteEngine on
RewriteCond $1 !^(test\.php|index\.php|img|js|css|font|robots\.txt|favicon\.ico)
RewriteRule ^(.*)$ test.php/$1 [L]
</IfModule>

なお、すでに動いている環境がある場合、そこでアクセスされるファイル名なども RewriteCond に書き加える必要があるので気をつける必要がある。

今回利用するサーバーは atpages さんのところ。

phpmysql.htaccess も使えるので便利なのだが、現在は新規で借りることは出来ないようだ。

なお、 atpages ではファイルの転送上限が決まっていて、それを超えると ftp でファイル転送が出来なくなるので注意が必要だ。

CI の application,system フォルダを転送するくらいなら余裕なので、それ以外の画像素材とかの転送容量に気をつけよう。

もし、上限に達してしまっても、 atpages の管理画面にある「簡単ファイルマネージャー」を使えば、更新やアップロードが出来る (WinSCPFFFTP と比べると非常に面倒くさいが)。

上限に達したときの制限の解除は、どこにも書いていないが、実際に上限に達してみたところ、2時間後には解除されておらず、半日後には解除されていたのでここにメモっておく。


転送が終わって、 URL を叩き test.php を開いてみると、待ち受けていたのは 500 エラーの洗礼。

これは mod_rewrite でおかしな挙動をしている場合に拝むことが出来る。

もちろん他にも色々原因は考えられるのだが、 .htaccess を削除したらこのエラーが消えて 404 になったので、今回は mod_rewrite の設定がうまく言っていないのだろう。

ここから3時間ばかり格闘して、何とか表示できるようになったので、そのときの .htaccess の内容を転記しておこうと思う。

<IfModule mod_rewrite.c>
RewriteEngine on
RewriteCond $1 !^(test\.php|index\.php|img|js|css|font|robots\.txt|favicon\.ico)
RewriteRule ^(.*)$ /~user_name/index.php/$1 [L]
</IfModule>

お気づきだろうか RewriteRule の /~user_name/index.php/$1 に。

user_name は借りたときのユーザー名なので、 test で登録したなら test が入るし、 usausa で登録したなら usausa が入る。

最初のと比べると /~user_name/ が多くなっている。

ここがミソなようだ。

実際に php で $_SERVER['REQUEST_URI'] を覗いてみると /~user_name/test.php となっていた。

.htaccess を上記に修正したら、まるで魔法が解けたかのように全てが動いた。

なので、 test.php を index.php に戻す。

こちらもちゃんと動く!動くぞ!

小躍りしていたのもつかの間、あることに気付いてしまう。

/user_name/ にアクセすると CI 側から 404 が返される。

ファイルがないときはサーバーが 404 を返すのだが、 CI が返すということはルーティングに失敗したということだ。

なんで?と思って、今度は CI の URI ヘルパーで current_url() を出力させてみると http://wwwXX.atpages.jp/~user_name/user_name となっている。

なるほど確かに user_name コントローラはないので、 404 を返すのも仕方がない。

どうしてこうなるのか、理由の考察は置いておいて、ひとまず手当てをしよう。

一番簡単なのは application/config/routes.php に一行書き加える。

$routes['user_name'] に、値は $routes['default_controller'] で設定したものと同じもの。

これで今ところ問題なく動作している。

やはり本番環境への移行は何度やっても慣れないものだ。

$routes['user_name'] が環境依存になるので、どうにか切り出したいところ。

今後の課題としておこう。