CakePHPの表示優先度 : controllersとwebroot。
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パラメータに置き換えてコントローラーを実行できる処理が入ってました。