1つのサイトに複数アプリ
Cakeって基本はDocrootにアプリを置くと素直に動作するようになってるみたいだけど、
1つのサイトにCakeを1つ置いておいて、複数アプリを動作させたいときに困る気がする。
特に、httpd.confにAliasを切って振り分けたいのだ・・・
appフォルダをalias指定すればいいけど、余計なフォルダが公開されてしまうので
できればapp/webrootだけを公開したい。
で、やってみたら動いたのでメモ。
httpd.conf
LoadModule rewrite_module modules/mod_rewrite.so Alias /appA "C:/cakephp/appA/webroot/" <Directory "C:/cakephp/appA/webroot/"> Options Indexes FollowSymLinks AllowOverride All Order allow,deny Allow from all </Directory> Alias /appB "C:/cakephp/appB/webroot/" <Directory "C:/cakephp/appB/webroot/"> Options Indexes FollowSymLinks AllowOverride All Order allow,deny Allow from all </Directory>
appA/webroot/.htaccess
<IfModule mod_rewrite.c> RewriteEngine On RewriteBase /appA <= 「この行を追加」 RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^(.*)$ index.php?url=$1 [QSA,L] </IfModule>
appB/webroot/.htaccess
<IfModule mod_rewrite.c> RewriteEngine On RewriteBase /appB <= 「この行を追加」 RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^(.*)$ index.php?url=$1 [QSA,L] </IfModule>
appA/webroot/index.php
appB/webroot/index.php
(省略) if (!defined('ROOT')) { //define('ROOT', 'FULL PATH TO DIRECTORY WHERE APP DIRECTORY IS LOCATED DO NOT ADD A TRAILING DIRECTORY SEPARATOR'; //You should also use the DS define to seperate your directories define('ROOT', dirname(dirname(dirname(__FILE__)))); } if (!defined('APP_DIR')) { //define('APP_DIR', 'DIRECTORY NAME OF APPLICATION'; define('APP_DIR', basename(dirname(dirname(__FILE__)))); } // ここから追加 if (!defined('WEBROOT_DIR')) { define('WEBROOT_DIR', basename(dirname($_SERVER['SCRIPT_NAME']))); } // ここまで追加 (省略)
要はwebrootが指定できればいいみたい。
上記の場合、http://localhost/appA/ or http://localhost/appB/ が
それぞれのwebrootフォルダを指すようになるので一件落着。