CakePHPでは、webrootディレクトリ内に設置したファイルは、通常の静的ファイルとしてアクセスできるんですが、グローバルテンプーレートとして、統一されたヘッダーや、フッターを利用したい場合があります。
その場合、pagesディレクトリを利用すると効果的なんですが、URLの見た目がイマイチです。
http://test.test/pages/company/index 等
そこで、以下のようにルールを決めましょう。かなりすっきりするハズ。
・拡張子 .html のURLへのアクセスは全てpagesディレクトリを参照する
・逆に、拡張子 .html なしURLへのアクセスはプログラムとみなし、独自controllerへアクセスする
・ファイル名を省略した場合は、index.htmlを補完する(独自controllerを利用した場合の自動index補完は無効となります)
具体的には、webroot配下の .htaccessファイルに以下を追記します。
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)/$ $1/index.html [QSA,L]
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*).html$ index.php?url=/pages/$1 [QSA,L]
これで、以下のようなURLでアクセス可能となります。
http://test.test/company/
http://test.test/company/agreement.html 等
ただし、この場合、scaffoldを利用した際に、不具合が生じますので、
RewriteRule ^(.*)/$ $1/index.html [QSA,L] の上に、「scaffold対象モデルの場合には、index.htmlを補完しない」という記述が必要です。
RewriteCond %{REQUEST_URI} !model名/
RewriteRule ^(.*)/$ $1/index.html [QSA,L]
- Newer: CakePHP Pagesクラスでmodelを利用する方法
- Older: CakePHPでSmartyのススメ