CakePHPの表示優先度 : controllersとwebroot。

プログラム
date 2013.03.06 tag CakePHP 備忘録

CakePHPでcontrollersとwebrootの両方に同じ名前のディレクトリが存在した場合の挙動についてメモ。

CakePHPのデフォルトルーティング

デフォルトのルーティングだと「http://www.example.net/news/」は下記のどちらかを実行/アクセスします。

  • /app/controllers/NewsController.phpのIndexメソッド
  • /app/webroot/news/index.html

ただし、もし両方にアクセスできる条件が存在する場合には/app/webroot/にあるファイルが優先的に表示されます。この理由は/app/webroot/直下に「.htaccess」に書いてありました。

.htaccess処理の優先順位

<IfModule mod_rewrite.c> RewriteEngine On RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^(.*)$ index.php?url=$1 [QSA,L] </IfModule>

webroot以下にURLのディレクトリ/ファイルがないなら(!は反転)GETパラメータに置き換えてコントローラーを実行できる処理が入ってました。