『CakePHP』を使ってみる 〜2〜 『CakePHP』をさくらインターネットに導入

『Fast CakePHP』で紹介されているサンプルをさくらインターネットに導入してみることに。

さくらインターネット』のプレミアムプランをマルチドメインで使用している。

CakePHP』をインストール

導入する場所は以下のようにしてみた。a
/home/theworld/www/lab/ の中身が http://lab.theworld.jp/ に相当。

CakePHP』の公式サイトから Stable 版をダウンロード

CakePHPのテスト用に cakephp ディレクトリを作って、さらに Fast CakePHP 用のディレクトリ fast を作った。

  • 導入先: /home/theworld/www/lab/cakephp/fast/
この中に、CakePHP の公式サイトから落としてきたソースを展開して入れる。
ディレクトリの中身。

[/home/theworld/www/lab/cakephp/fast] ls -a
.               .htaccess       cake            index.php
..              app             docs            vendors

ブラウザでアクセスしてみる

CakePHP』を導入した http://lab.theworld.jp/cakephp/fast/ にアクセスしてみる。

404 になってしまった。

mod_rewrite の設定を変更

解説によると、この画面が出たら mod_rewrite の設定に RewriteBase を追加するようにとのこと。
さくらインターネットでの設定を検索してみたら、フォーラムに以下のように書かれていたのでそのまま試してみる。

1) cake インストールフォルダの htaccess には、 "RewriteBase /cake"を追加。
2) app の htaccess には、 "RewriteBase /cake/app"を追加。
3) app\webroot の htaccess には、 "RewriteBase /cake/app/webroot"を追加。

うまく動いたようだ。


Internal Server Error』が出る問題

ただ、この設定でインデックスにアクセスした時は問題ないのだけど、本の作業を進めていきアクションを作ってそこにアクセスする段階で『Internal Server Error』が出るようになってしまった。

さくらインターネットで 500 エラーが出るのは、PHP ファイルのパーミッションが『755』になっている場合が多い。
しかし、とりあえずインデックスは出ているしパーミッションは指定したので問題はなさそう。
.htaccess』の設定があやしいので、いろいろと試してみた。

結果として、webroot に設置した htaccess の設定を変更したらうまく動作するようになった。
忘れてまたハマるのがイヤなので設定をメモ。

/home/theworld/www/lab/cakephp/fast/.htaccess
<ifmodule>
   RewriteEngine on
   RewriteBase    /cakephp/fast
   RewriteRule    ^$ app/webroot/    [L]
   RewriteRule    (.*) app/webroot/$1 [L]
</ifmodule>
/home/theworld/www/lab/cakephp/fast/app/.htaccess
<ifmodule>
    RewriteEngine on
    RewriteBase    /cakephp/fast/app
    RewriteRule    ^$    webroot/    [L]
    RewriteRule    (.*) webroot/$1    [L]
</ifmodule>
/home/theworld/www/lab/cakephp/fast/app/webroot/.htaccess
<ifmodule>
    RewriteEngine On
    RewriteBase    /cakephp/fast/
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^(.*)$ index.php?url=$1 [QSA,L]
</ifmodule>

マルチドメインでの RewriteBase 指定がよくわからなくて時間がかかってしまった。