2014年3月13日木曜日

[CakePHP]Composerを使用した場合にApacheのDocumentRootの設定をどうするか

※CakePHP 2.4.6を使用

以下とかでcomposerを使用したCakePHPのインストール方法が紹介されている。

ComposerでCekePHPをインストール¶
CakePHP 2.xをComposerでインストールする

ただ、一つ気に入らない点がある。
ApacheのDocumentRootをapp/webrootに指定しなければならないことだ。
apache側の設定を変えるのは環境依存要因を増やすことになるので嫌だ。

なので、対策を考えた。
プロジェクトのルートディレクトリ(composer.jsonが配置されているディレクトリ)に以下の2ファイルを追加することだ。
これらは、普通に(Composerを使わずに)CakePHPをインストールした場合に、プロジェクトのルートディレクトリに入っているものを使う。ただ、.htaccessはそのままでよいが、index.phpは38行目のみ修正が必要である。

.htaccess

   RewriteEngine on
   RewriteRule    ^$ app/webroot/    [L]
   RewriteRule    (.*) app/webroot/$1 [L]


index.php

<?php
/**
 * Requests collector.
 *
 *  This file collects requests if:
 *	- no mod_rewrite is available or .htaccess files are not supported
 *  - requires App.baseUrl to be uncommented in app/Config/core.php
 *	- app/webroot is not set as a document root.
 *
 * CakePHP(tm) : Rapid Development Framework (http://cakephp.org)
 * Copyright (c) Cake Software Foundation, Inc. (http://cakefoundation.org)
 *
 * Licensed under The MIT License
 * For full copyright and license information, please see the LICENSE.txt
 * Redistributions of files must retain the above copyright notice.
 *
 * @copyright     Copyright (c) Cake Software Foundation, Inc. (http://cakefoundation.org)
 * @link          http://cakephp.org CakePHP(tm) Project
 * @since         CakePHP(tm) v 0.2.9
 * @license       http://www.opensource.org/licenses/mit-license.php MIT License
 */

/**
 *  Get CakePHP's root directory
 */
define('APP_DIR', 'app');
define('DS', DIRECTORY_SEPARATOR);
define('ROOT', dirname(__FILE__));
define('WEBROOT_DIR', 'webroot');
define('WWW_ROOT', ROOT . DS . APP_DIR . DS . WEBROOT_DIR . DS);

/**
 * This only needs to be changed if the "cake" directory is located
 * outside of the distributed structure.
 * Full path to the directory containing "cake". Do not add trailing directory separator
 */
if (!defined('CAKE_CORE_INCLUDE_PATH')) {
	define('CAKE_CORE_INCLUDE_PATH', ROOT . DS . 'Vendor/cakephp/cakephp/lib');
}

require APP_DIR . DS . WEBROOT_DIR . DS . 'index.php';

0 件のコメント:

コメントを投稿