CakePHP 1.1 で webroot を変更する際の注意点
CakePHP 1.1 で /app/webroot の場所を変更する際は注意点があります。
少しでもセキュリティを向上させるために、ドキュメントルート以下には webroot のみを配置しようと考えることは多いと思いますが、 CakePHP 1.1 では実際にアプリケーションにアクセスする際の URL を webroot が配置されているパスから算出するため、もし webroot をシンボリックリンクにしている場合に問題に遭遇します。
たとえば、ドキュメントルートが /var/www で webroot のディレクトリが /usr/local/app 以下にあるとして、シンボリックリンクを張るために次のコマンドを実行したとします。
ln -s /use/local/app/webroot /var/www/webapp
このアプリケーションへは http://www.domain.tld/webapp/ という URL でアクセスできるはずですが、環境によってはスタイルシートなどが読み込めなくなることがあります。これは webroot が配置されているパスとドキュメントルートのパスから /webrpp/ というベース URL を決定しており、シンボリックリンクを張ると次の式が成り立たなくなる可能性があるためです。
/var/www/webapp/ - /var/www/ = /webapp/
多くの環境では、シンボリックリンクを張ると、さもその場所にディレクトリがコピーされたかのような扱いになるため問題はないのですが、環境によってはそうならない場合もあります(つまり /var/www/webapp の中で pwd すると /var/www/webapp と返ってくるような環境がある)。
この問題に対応するためには次の手段を講じます。
- 本当にその場所に webroot をコピーする
- $Controller::webroot と $Controller::base にベース URL (前述の例の場合 “/webapp/” )をセットする
お好みにあわせてどうぞ。