くまきち

山と旅と家族が大事。
でも激しい物欲が理性と財布のタガを飛ばす
最近は自転車も乗ってる

CakePHPとmod_rewriteの関係

2008-06-16 22:35:02 | SEまわり
CakePHPでも、やっぱりmod_rewrite関係でハマる…。


DocumentRoot直下にCakePHP一式を配置する場合は良いが、/sample/配下のように、サブディレクトリを掘って、その下にCakePHPとスクリプト群を配置する場合は、注意が必要。

CakePHPのチュートリアルで気をつけたいこと にある通り、ApacheのRewriteルールの関係で、404エラー(File Not Found)が出て作業がちっとも進まなくなってしまう。

Apacheのhttpd.confのRewriteモジュールの設定は次のようにしている。これは、Zend Frameworkを使うためにしている設定。

RewriteEngine on
RewriteRule !\.(js|ico|gif|jpg|png|css)$ index.php


これだけだと、CakePHPのチュートリアルをサブディレクトリに配置したケースでは動いてくれない。

httpd.confで、.htaccessをOverrideできるように設定しておく。オプションはちゃんと理解してから書くこと。 適当にやると、適当にやられます。

AllowOverride AuthConfig FileInfo Indexes Limit


んで、各CakePHPディレクトリの.htaccessを次のように定義。

【/sample/.htaccess】
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteBase /sample/
RewriteRule ^$ app/webroot/ [L]
RewriteRule (.*) app/webroot/$1 [L]
</IfModule>


【/sample/app/.htaccess】
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteBase /sample/app/
RewriteRule ^$ app/webroot/ [L]
RewriteRule (.*) app/webroot/$1 [L]
</IfModule>


【/sample/app/webroot/.htaccess】
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteBase /sample/app/webroot/
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.php?url=$1 [QSA,L]
</IfModule>



これで、動くようになるです。

最新の画像もっと見る