仕事で CakePHP を使ってみようと思い、Cake ブログチュートリアルにしたがってブログを作ってみようとしたところ、mod_rewrite まわりではまったので作業メモを残します。ポイントは、アプリケーションの .htaccess に RewriteBase を正しく設定することでした。

肝心の CakePHP ですが、開発環境は以下の通り。

XAMPP は C:\Program Files\XAMPP 以下にインストールされており、Eclipse のワークスペースは D:\doc\workspace にあります。ブログアプリケーションは D:\doc\workspace\blog に作りました。

症状としては「アプリケーションへのアクセスに Apache の Alias を利用した場合に、mod_rewrite が正しく動作せず、CSSや画像が読み込まれなかった」です。

以下、作業手順です。

—–

1. Apache の設定
XAMPP の Apache は初期状態で mod_rewrite が無効になっているので、有効にする。設定ファイルの
#LoadModule rewrite_module modules/mod_rewrite.so
の行頭の # を外して mod_rewrite モジュールをロードする。

また、http://localhost/blog でブログアプリケーションにアクセスするために、エイリアス設定を行う。同時にアプリケーションで .htaccess を有効にするため、AllowOverride All を設定しておく。

Alias /blog/ "D:/doc/workspace/blog/"
<Directory "D:/doc/workspace/blog">
AllowOverride All
Allow from All
</Directory>

2. ブログアプリケーションの設定
チュートリアルにしたがって、データベース等の設定を行う。ここで、mod_rewrite の設定にはまった。上記の Alias 設定により、現在 /blog でブログアプリケーションは動作しているが、CakePHP に付属している初期状態の .htaccess は RewriteBase の記述がないため、そのままでは /blog 以下にリライトされない。そこで、.htaccess に RewriteBase を追加する。

blog/.htaccess に以下を追加:
RewriteBase /blog

blog/app/.htaccess に以下を追加:
RewriteBase /blog/app

blog/app/webroot/.htaccess に以下を追加:
RewriteBase /blog/app/webroot

以上で正しくリライトされるようになり、CSS や画像が表示された。