CakePHPでmod_rewriteが有効な環境ではApp.baseUrlをコメントアウトする
最近、CakePHPを使った開発をやってるんですが、恥ずかしいところでハマってしまったので、恥を晒します。
例えば、app/view/posts/index.ctp に
$html->link('投稿', 'add');
といった記述をすると
<a href="/posts/add">投稿</a>
と表示されるべきなのに、どういうわけか、
<a href="/webroot/index.php/posts/add">投稿</a>
と表示されてしまうという現象が発生していました。ちなみにmod_rewriteを有効にしています。
大きな問題にはならないのですが、恥ずかしいURLになってしまっているので、現象が発生している原因を調べて修正することにしました。
(今思えばもうちょっとドキュメントを読めばよかったんですが)力技でソースコードを追うことにしました。
- HtmlHelperクラス
- Helperクラス
- Routerクラス
の順でソースコードを追っていくと1つの結論にたどり着きました。
結局、結論としては...
mod_rewriteは有効な環境であれば、app/config/core.php内の環境変数App.baseUrlが
//Configure::write('App.baseUrl', env('SCRIPT_NAME'));
とコメントアウトになっているべきところが、なぜかアンコメントアウトされていたのが原因でした。
うーん、CakePHPのドキュメントにも書いてあるなぁ。
ここは予想なんですが、プロジェクト作成時にbakeを実行したのですが、その時にmod_rewriteが有効な環境ですか?という質問を訊ねられた時に n と答えてしまったのかもしれないなぁ。(多分そうだと思う)