参考にさせて頂いたページ
CakePHPをさくらインターネットのサブドメインを使用する環境へインストールする | Wataame Frog
URLリライティング — CakePHP Cookbook 2.x ドキュメント
今回起こった問題
DocumentRootで指定したページにアクセスすると、home.ctpの内容が表示されるけど、
- Controller/MembersController.php
- View/Index.ctp
を作成したときに例えば
http://example.com/members/index
にアクセスしても、
Not Found
The requested URL /Members/accept was not found on this server.
Apache/2.2.15 (CentOS) Server at utility.localhost.uh-oh Port 80
と表示されてしまうため、これを解決したい。
解決策の概要
.htaccessを3つ適切なディレクトリに配置することで、解消できる。
例となるディレクトリ構造
例として以下のような構造になっているものとする。
あえて公開ディレクトリにも、非公開ディレクトリにもhogeディレクトリを間に挟んで、参考ページよりも一階層深い構造の例を挙げてみる。
.htaccessにそれぞれ記述する内容
参考ページを見ながら進めてみる。
/home/ユーザ名/hoge/cakephp/.htaccess
仮にhogeディレクトリを間に挟んだとすると、以下のような記述になった。
RewriteBase,RewriteRule,RewriteRuleと三行は自分の環境に合わせてパスを変更する。
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteBase /cakephp/app
RewriteRule ^$ /www/hoge/webroot/ [L]
RewriteRule (.*) /www/hoge/webroot/$1 [L]
</IfModule>
/home/ユーザ名/hoge/cakephp/app/.htaccess
仮にhogeディレクトリを間に挟んだとすると、以下のような記述になった。
RewriteBase,RewriteRule,RewriteRuleと三行は自分の環境に合わせてパスを変更する。
cakephpディレクトリに配置したものと、cakephp/appディレクトリに配置したものの記述内容は同じ。
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteBase /cakephp/app
RewriteRule ^$ /www/hoge/webroot/ [L]
RewriteRule (.*) /www/hoge/webroot/$1 [L]
</IfModule>
/home/ユーザ名/www/hoge/webroot/.htaccess
これはhogeディレクトリを挟んだとしても、参考ページそのままに以下のように記述して配置した。
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.php?url=$1 [QSA,L]
</IfModule>
さくらのレンタルサーバに限った問題では無かった
公式の「応用インストール」から遷移した、「URLリライティング」のページに書いてあった。
URLリライティング — CakePHP Cookbook 2.x ドキュメント
nginxでの方法も書いてあるみたい。
とはいえ参考にさせて頂いたページはわかりやすくて助かった。