CakePHP:CakePHPで静的ページを追加

CakePHP静的ページを追加する場合、「app/views/pages」か「app/webroot」の下にフォルダやファイルを配置すると思います。

今回、「app/webroot」の下に静的コンテンツを追加した時に困ったことがあったのでメモします。


CakePHPで静的ページを追加「app/webroot」

「app/webroot」の下に追加したいコンテンツを設置します。

/app/webroot/hoge/index.html

下記のようにアクセスした場合は正常にページが表示されます。

http://ドメイン/hoge/index.html
http://ドメイン/hoge/

しかし、最後の「/」をなしの状態でアクセスすると、
下記のように「app/webroot」が付いたURLにリダイレクトされてしまいました。

http://ドメイン/hoge

↓(リダイレクトされてしまう)

http://ドメイン/app/webroot/hoge/

上記のように「app/webroot」がついたURLにリダイレクトされたくなかったので、
ドキュメントルートの直下に置いてる「.htaccess」を変更して下記のように対処しました。

<IfModule mod_rewrite.c>
   RewriteEngine on
   RewriteRule    ^hoge$ /hoge/index.html [R=301,L]
   RewriteRule    ^$ app/webroot/    [L]
   RewriteRule    (.*) app/webroot/$1 [L]
</IfModule>

下記の一行を追加しました。
「hoge」でアクセスした場合、「hoge/index.html」にリダイレクトするようにしています。

   RewriteRule    ^hoge$ /hoge/index.html [R=301,L]

ただ、これだと「http://ドメイン/app/webroot/hoge/」でアクセスした時にページが表示されてしまいます。

色々調べていて下記のサイトを発見しました。
参考になりました。ありがとうございます。

CakePHP 静的コンテンツのURLについて | Fusic Developers Weblog

「app/webroot」の直下にある「.htaccess」を下記のように変更しています。

<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^(.*)$ index.php?url=$1 [QSA,L]
    RewriteCond %{THE_REQUEST} "^(.+?) (.*?)/app/webroot/(.*?) (.+?)$"
    RewriteRule ^(.*?)$ %2/%3 [R=301,L,NE]
</IfModule>

下記の二行を追加しています。

    RewriteCond %{THE_REQUEST} "^(.+?) (.*?)/app/webroot/(.*?) (.+?)$"
    RewriteRule ^(.*?)$ %2/%3 [R=301,L,NE]

「app/webroot」がある場合、「app/webroot」を省いたものでリダイレクトするようです。

上記の設定をすると「app/webroot」がついたURLでアクセスした際に、
リダイレクトされてアクセスすることができました。


上記以外にも他に良い方法があれば知りたいです。

  • このエントリーをはてなブックマークに追加

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です