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 さんのところ。
php も mysql も .htaccess も使えるので便利なのだが、現在は新規で借りることは出来ないようだ。
なお、 atpages ではファイルの転送上限が決まっていて、それを超えると ftp でファイル転送が出来なくなるので注意が必要だ。
CI の application,system フォルダを転送するくらいなら余裕なので、それ以外の画像素材とかの転送容量に気をつけよう。
もし、上限に達してしまっても、 atpages の管理画面にある「簡単ファイルマネージャー」を使えば、更新やアップロードが出来る (WinSCP や FFFTP と比べると非常に面倒くさいが)。
上限に達したときの制限の解除は、どこにも書いていないが、実際に上限に達してみたところ、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'] が環境依存になるので、どうにか切り出したいところ。
今後の課題としておこう。