Cakephpのパス関連定数
前回のエントリーでは、cakephpのapp内に位置するtmpディレクトリのパス変更をcakephpのコア部分を変更することでpath変更してみた。
今回は、TMPと同じくらい重要なWWW_ROOTのパスを変更してみようと思う。
CakephpのWWW_ROOTとは、コア定義定数とされており、ウェブルートへのフルパスが格納されている重要な定数です。デフォルトの値は、
C:\apache\htdocs\vhost\cakephp\app\webroot\
となっていて、webroot内には主に静的なファイル類(画像やrobots.txt、css)が格納されている。またCakephpの起点となるindex.phpも含まれている。
多言語化などの要件によりサイトを多チャネル化して、表示する画像を言語によって変える必要があったり、robots.txtをチャネル毎に個別に管理する必要が生じた場合には、このwebrootを複製する方法で対応できる。
作業の内容
具体的には、webrootを同じ階層にコピーした上で、コピーしたディレクトリを
webroot-en
にリネームする。
ここでは、webrootが日本語サイト用、webroot-enが英語サイト用であることを想定している。そして、以下のような設定でvirtual hostを新設する。
ServerName test.com DocumentRoot "C:/apache/htdocs/vhost/cakephp/app/webroot-en" <Directory "C:/apache/htdocs/vhost/cakephp/app/webroot-en"> <IfModule mod_rewrite.c> RewriteEngine On RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^(.*)$ index.php?url=$1 [QSA,L] </IfModule> </Directory>
DocumentRootとDirectoryのパスに直接コピーしたwebroot-enを指定している。
上記のwebサーバの設定とwebrootのコピーとリネームにより、Cakephpのコアファイルやapp内のコードに対する変更無しに、WWW_ROOTの値を変更することが出来る。
多くのvirtual hostの設定が必要な場合は、採用し難い方法だが、数が少ない場合はサイトの多チャネル化において有効な方法だと思う。