まずは、公開ディレクトリ上にCakePHPを配置した状態で、サイトを訪問するユーザー用と運営者用のappディレクトリを作成してみます。「http://localhost/」にアクセスすると、サイトを訪問するユーザー用アプリケーション、「http://localhost/admin/」にアクセスすると、運営者用アプリケーションをそれぞれ表示とします。

まず、Cakeアプリケーションには三つの主要な部分があります。

  • CakePHPのコアライブラリは、 /lib/Cakeの中にあります。
  • アプリケーションコードは、/appの中です。
  • アプリケーションのドキュメントルートは、通常、/app/webrootにあります。

この各ディレクトリは、webrootを除いて、ファイルシステム内のどこにでも配置できます。 webrootは、Webサーバからアクセスできるようにする必要があります。 しかし、Cakeに場所を知らせれば、webrootフォルダをappフォルダの中から取り出すことも可能です。

最初に、「app」ディレクトリをコピーして、「admin」ディレクトリを作成します。

/ドキュメントルート
    / app       // 訪問者用アプリケーション
    / admin     // 運営者用アプリケーション
    / lib
    / plugins
    / vendors
    .htaccess
    index.php

次に、/app/webrootと/admin/webrootだけを公開ディレクトリ、残りを非公開ディレクトリに配置した状態で複数管理してみます。

公開ディレクトリを「/www」、非公開ディレクトリを「/cakephp」、訪問者用アプリケーションディレクトリを「/cakephp/app_user」、運営者用アプリケーションディレクトリを「/cakephp/app_admin」とします。
まずは、訪問者用のwebrootの直下のファイルとフォルダを「/www」を配置します。次に、運営者用のwebrootを配置する為に、「/admin」を「/www」に作成し、運営者用のwebrootの直下のファイルとフォルダを「/www/admin」を配置します。

配置が完了すると、「app / webroot」内に配置されているディレクトリやファイルを、「/ www」と「/ admin」内に移動させます。これで、訪問者用と運営者用の「webroot」の役割を果たすディレクトリの準備ができました。

次は、「残りを非公開ディレクトリに配置」します。CakePHPのコアディレクトリやアプリケーションディレクトリを「/cakephp」に移動させます。「/app」ディレクトリをコピーして、「/app_user」と「/app_admin」を作成します。

次のようなディレクトリ構造になります。

/ cakephp        // 非公開ディレクトリ
    / app_user   // 訪問者用アプリケーション
    / app_admin  // 運営者用アプリケーション
    / lib 
    / plugins
    / vendors
/ www           // 公開ディレクトリ
    / admin      // 運営者用webroot
    / css        
    / files
    / img
    / js
    .htaccess
    index.php
    css.php
    test.php

最後に、webroot内に配置された「index.php」と「admin/index.php」を編集します。編集する項目は、定数「ROOT」「APP_DIR」「CAKE_CORE_INCLUDE_PATH」の3つです。

「ROOT」には「/ app_user」や「/ lib」などのディレクトリを配置したディレクトリへのパス、「APP_DIR」には「app」ディレクトリの名前、「cAKE_CORE_INCLUDE_PATH」には、CakePHPのコアを配置したディレクトリへのパスを書きます。
今回の環境では、 アプリケーションディレクトリやCakePHPコアを移動させたので、「/ www / index.php」と「/ www/admin/index.php」を次のように編集します。

「/ www / index.php」の編集箇所

/**
 * The full path to the directory which holds "app", WITHOUT a trailing DS.
 *
 */
if (!defined('ROOT')) {
    define('ROOT', . DS . 'cakephp');
}
/**
 * The actual directory name for the "app".
 *
 */
if (!defined('APP_DIR')) {
    define('APP_DIR', 'app_user');
}
/**
 * The absolute path to the "cake" directory, WITHOUT a trailing DS.
 *
 */
// for built-in server
if (php_sapi_name() === 'cli-server') {
	if ($_SERVER['REQUEST_URI'] !== '/' && file_exists(WWW_ROOT . $_SERVER['PHP_SELF'])) {
		return false;
	}
	$_SERVER['PHP_SELF'] = '/' . basename(__FILE__);
}

「/ html / admin / index.php」』の編集の記述は省略します。

「ROOT」は、非公開ディレクトリへのパス「 DS . ‘cakephp’」に変更し、「APP_DIR」は、それぞれのアプリケーションディレクトリ名「 ‘app_user’」「 ‘app_admin’」に変更し、「CAKE_CORE_INCLUDE_PATH」は、修正が必要ないので、そのままにします。