DocumentRootとHTMLヘルパー
cakePHP付属のHTMLヘルパーについて。
cakeのwebroot != wwwサーバのDocumentRootの環境では、
アンカー生成ヘルパーの$html->linkが使えない。
第2引数の$urlに相対パスで指定したURLを渡してやると
勝手にwwwサーバのDocumentRootからの相対パスを補完したURLに変換してしまうからだ。*1
文章で書くとややこしいので具体例を下記に。
ドメイン名 ・・・ example.jp wwwサーバのDocumentRoot ・・・ /var/www/ cakePHPのwebroot ・・・ /var/www/cake/webroot/
という環境で、registアクションを起動するリンクを生成しようとし
$html->link('登録','/regist')とした出力結果はこうなる
<a href="http://www.example.jp/cake/webroot/regist">
これではcakeアクションにwebroot、registという2つのパラメータを渡したように解釈されてしまいよろしくない。
本当は下のようになってほしい。
<a href="http://www.example.jp/regist">
一応解決策としては、
- 第2引数の$urlにhttp:から始まるパスを指定する。
- ヘルパーを使わずリンクを手書きする
ってのがあるけど、どうも気持ちよくない。
cakeのwebrootとwwwサーバのDocumentRootが違う環境ってのは結構ありそうなんだけど、みんなどうしてるんかな?
(追記)
CakePHPでmod_rewriteを使わない場合の設定
これが答えかな?
家帰ったら試してみよう。
*1:ちなみにURLを'http:'から指定してやると、パスの補完は行われない