CakePHP の mod_rewrite 設定について質問です。
CakePHP を個人ローカル環境で動かしたいです。例を挙げると
http://localhost/~foo/cakedemo/
で、cake のブログ・チュートリアルが動いています。まずここで、mod_rewrite が巧くいかなかったので、core.php の
define ('BASE_URL', env('SCRIPT_NAME'));
をコメント・アウトしてブログを作成、稼働を確認しました。ただし投稿後 flash 画面からの自動遷移などが動きません。そこで本来の通り mod_rewrite を使ってみようと考えました。
この状況下で
http://localhost/~foo/cakedemo/
にアクセスすると、インデックス・ページが表示されますが、投稿の編集画面に移動しようとすると、
http://localhost/posts/edit/1
のようになり、存在しない URL へのアクセスで失敗します。こんな場合に
http://localhost/~foo/cakedemo/posts/edit/1
というふうにアクセスしたいのです。ですが、RewriteBase を自分なりに設定しても問題を解決できませんでした。
このような場合に .htaccess(3種)をどのように設定すればいいのでしょうか? ローカルで mod_rewrite して動かすことはできないのでしょうか?
どうぞ御知恵を拝借させてください。
http://cakephp.jp/doc/apas12.html
Example A.14. /app/views/posts/index.thtml (edit リンクの追加)
<?php echo $html->link('編集', '/posts/edit/'.$post['Post']['id']);?>
を
<?php echo $html->link('編集', '/~foo/cakedemo/posts/edit/'.$post['Post']['id']);?>
にする。
こういう事ではなくてmod_rewriteを利用してという事でしたら、間違った回答なのでごめんなさい。
Apacheの設定は如何でしょうか。
http://cakephp.seesaa.net/article/22916222.html
(Apacheを動かしていると思われますが、もしも別のhttpサーバによる稼働ですと、Apacheの機能であるmod_rewriteは使えません。一応…。違っていたらごめんなさい。)
若干、情報がたりなかったのでしょうが当然 Apache2 が ubuntu 上で動いていて、
AllowOverRide All
になっています。.htaccess での上書き設定が効いているのでちゃんと稼働しているように思われますが、もし、不完全な稼働になっているのならば、お手数ですがチェック方法を教えてください。
CakePHP を使った事がないので、ざっと調べた範囲でお答えします。大幅にハズしている可能性もありますので、その際はご容赦下さい。(当然ポイント不要です)
まず、ページ遷移の際に目的としていないページを見に行ってしまっている様ですが、これは mod_rewrite には関係なく、CakePHP の設定ミスでしょう。
CakePHP の本体があるディレクトリ(? /home/foo/public_html/cakedemo でしょうか?)にある index.php で、
define ('APP_DIR', '○○○○');
としている所があるらしいのですが、これを修正し忘れていませんか?
ご質問の場合、
define ('APP_DIR', '/~foo/cakedemo');
この様になるのではないでしょうか?
http://cakephp.jp/doc/ch03s04.html#id4797748 を参考にしました。
次に .htaccess の設置場所が変な気がします。
/~foo/cakedemo/ の実態が、/home/foo/public_html/cakedemo/ であるなら、
/home/foo/proj/cakedemo/.htaccess
/home/foo/proj/cakedemo/app/.htaccess
/home/foo/proj/cakedemo/app/webroot/.htaccess
を設置しても、全く参照されません。
/~foo/cakedemo/posts/edit/1 へのアクセスを
/~foo/cakedemo/index.php?url=posts/edit/1 の様に書き換えたいのなら、
/home/foo/public_html/cakedemo/.htaccess に記述する事になると思います。
ところで、3個も .htaccess が必要なんですか?
app や app/webroot へパスしなくてもいい様に思うのですが。
で、.htaccess の内容については、上の例の様な置き換えならコメント欄に書かれている最後のファイルの記述だけでいい様に思うのですが。(/home/foo/proj/cakedemo/app/webroot/.htaccess を /home/foo/public_html/cakedemo/ に移動する)
蛇足ですが、.htaccess 内で
<IfModule mod_rewrite.c>〜</IfModule>
としなくてもいい様に思います。
mod_rewrite モジュールが読み込まれていて、有効になっていないと
.htaccess ファイルを読んでもくれませんから。
おかげでカスタム・セットアップのために2種の index.php (/cakedemo 以下と /cakedemo/app/webroot 以下)にパス設定が必要なことが分かりました。
しかし、実際にお使いでない所為か的外れの部分も散見されます。段階的な .htaccess 設定になっているのは、そういった動作をするように作りこまれているからに思えてなりません。
たとえば通常の設定の場合
によって、インデックス・ページが表示され、
http://www.cakedemo.com/posts/add
では新規投稿ページが表示され、
http://www.cakedemo.com/posts/edit/1
では投稿(1)についての編集ページが表示されます。この背景では各階層の index.php が処理の振り分けを担当しているようです。
逆に言うと、こんな作りになっているから、自分の手に負えず、こうやって質問させていただいています。
########
解答には近づいてきているようですが、やはり実際に cake をお使いの方に訊くしかないようです。急ぎなのですが、仕方ありません。http://cakephp.jp/ のほうで質問してみようかと思います。
お世話になりました。
ありがとうございます。
次善の回答としては十分ですね。
でも、いちおう mod_rewrite の利用で解決できるかどうか、ひきつづき回答を募集させてください。