モノラルログ

マツオ ( @matsuoshi / monaural.net ) のざっくりしたブログです

CakePHP で静的ページと動的ページを共存させるために mod_rewrite をいじった

CakePHP のディレクトリ構成に関してちょっとハマって、とりあえず解決したのでメモ。

たとえば Cake を使っているときに http://example.com/test/ ってアドレスにアクセスすると、デフォルトでは test コントローラの index アクションに処理が移ると思います。しかしここで、すでにサイトに /test ってフォルダが存在する場合は 403 Forbidden のエラーになってしまいました。

Cake ではすでにその URL がページとして存在する場合、Cake に処理を移さずそのまま表示されます。それは問題なし。
しかし今回は /test フォルダはあるけれども、その配下に index.html がなかったため、/test 配下の一覧を表示できないよーという 403 Forbidden エラーになってしまうと。あ、ここには index.html 以外に必要なファイルを置きたいため、このフォルダ自体を削除するわけにはいきませんよと。この条件で、Cake に処理を移したいんだけど・・・。

つまり cake を使わない静的ページと cake の動的なページを共存させたい、のだけれどデフォルトの設定では一部条件でうまくいかなかったのです。


結果。
ちょっと試行錯誤しまして、結局 webroot にある .htaccess を次のように修正しました。

    RewriteCond %{REQUEST_FILENAME} !-d

上の 1行をコメントアウトし、かわりに下記の 2行を追加します。

    RewriteCond %{REQUEST_FILENAME}/index.html !-f
    RewriteCond %{REQUEST_FILENAME}/index.php !-f

ひとまず、これで動作しました。
フォルダが存在するかどうかのチェックをやめて、index.html と index.php というファイルがあるかどうかのチェックに変えてみたのです。URL で呼び出されたフォルダが存在しても、配下に index.html か index.php がなければ CakePHP に処理を移す感じになります。

いや、まだしっかり検証はできてないんですけども・・・(大丈夫かなあ)