人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

お世話になります。
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 して動かすことはできないのでしょうか?

どうぞ御知恵を拝借させてください。

●質問者: 大蘇 蓮風
●カテゴリ:コンピュータ ウェブ制作
✍キーワード:.htaccess Cake CakePHP CORE Flash
○ 状態 :終了
└ 回答数 : 3/3件

▽最新の回答へ

1 ● ktoshi
●25ポイント

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を利用してという事でしたら、間違った回答なのでごめんなさい。

◎質問者からの返答

ありがとうございます。

次善の回答としては十分ですね。

でも、いちおう mod_rewrite の利用で解決できるかどうか、ひきつづき回答を募集させてください。


2 ● tkyk3
●20ポイント

Apacheの設定は如何でしょうか。

http://cakephp.seesaa.net/article/22916222.html

(Apacheを動かしていると思われますが、もしも別のhttpサーバによる稼働ですと、Apacheの機能であるmod_rewriteは使えません。一応…。違っていたらごめんなさい。)

◎質問者からの返答

若干、情報がたりなかったのでしょうが当然 Apache2 が ubuntu 上で動いていて、

AllowOverRide All

になっています。.htaccess での上書き設定が効いているのでちゃんと稼働しているように思われますが、もし、不完全な稼働になっているのならば、お手数ですがチェック方法を教えてください。


3 ● tezcello
●35ポイント

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/

によって、インデックス・ページが表示され、

http://www.cakedemo.com/posts/add

では新規投稿ページが表示され、

http://www.cakedemo.com/posts/edit/1

では投稿(1)についての編集ページが表示されます。この背景では各階層の index.php が処理の振り分けを担当しているようです。

逆に言うと、こんな作りになっているから、自分の手に負えず、こうやって質問させていただいています。


########

解答には近づいてきているようですが、やはり実際に cake をお使いの方に訊くしかないようです。急ぎなのですが、仕方ありません。http://cakephp.jp/ のほうで質問してみようかと思います。

お世話になりました。

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ