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になってしまっているので、現象が発生している原因を調べて修正することにしました。

(今思えばもうちょっとドキュメントを読めばよかったんですが)力技でソースコードを追うことにしました。

  1. HtmlHelperクラス
  2. Helperクラス
  3. Routerクラス

の順でソースコードを追っていくと1つの結論にたどり着きました。

結局、結論としては...

mod_rewriteは有効な環境であれば、app/config/core.php内の環境変数App.baseUrlが

    //Configure::write('App.baseUrl', env('SCRIPT_NAME'));

コメントアウトになっているべきところが、なぜかアンコメントアウトされていたのが原因でした。

うーん、CakePHPのドキュメントにも書いてあるなぁ。

ここは予想なんですが、プロジェクト作成時にbakeを実行したのですが、その時にmod_rewriteが有効な環境ですか?という質問を訊ねられた時に n と答えてしまったのかもしれないなぁ。(多分そうだと思う)