CakePHP1.3のデフォルトのディレクトリ構成を変更して、セキュリティの強化を図ります。
通常、CakePHPをインストールする場合、ダウンロードしてきたソースを公開フォルダに展開するだけです。この手軽さが利点なのですが、ログやキャッシュファイルなど、直接アクセスしてもらいたくないファイルも公開ディレクトリに展開されることになります。
アクセスを許したくないフォルダに制限を設けるのも一つの方法ですが、めんどくさいですね。
ただ、詳細は省きますが、基本的にはアクセスできないようなしくみにはなっているのです。しかし、そうは言っても気持ちが悪いですよね。
CakePHPでは「/app/webroot」フォルダに設置した静的コンテンツは、ブラウザから直接リクエストを発行してアクセスできます。それ以外のリクエストについてはフレームワークで処理されます。つまり、リクエストからの処理の流れが「ドキュメントルート」⇒「webroot」⇒「フレームワーク」のようになっているのです。
この構造を少し単純化して「webroot」⇒「フレームワーク」にしてしまおうというのが今回の考えです。つまりは、「ドキュメントルート」を「webroot」にしてしまうわけです。
具体的な手順としては以下の3ステップです。
1ステップとして、全てのCakePHPファイルを公開フォルダの1つ上の非公開の階層、例えば「/cakephp」に移動します。
2ステップとして、「/cakephp/app/webroot」の全てのファイルを公開フォルダ、例えば「/public_html」に移動します。
3ステップは、「/public_html/index.php」に記述されているパスを以下のように書き換えます。
if (!defined('ROOT')) { define('ROOT', dirname(dirname(dirname(__FILE__)))); } if (!defined('APP_DIR')) { define('APP_DIR', basename(dirname(dirname(__FILE__)))); }
if (!defined('ROOT')) { define('ROOT', dirname(dirname(__FILE__)).DS.'cakephp'); } if (!defined('APP_DIR')) { define('APP_DIR', 'app'); }
以下、デフォルトのディレクトリ構成です。
/public_html/app/ |
/public_html/app/webroot/ |
/public_html/webroot/css/ |
/public_html/webroot/img/ |
/public_html/webroot/js/ |
/public_html/webroot/.htaccess |
/public_html/webroot/index.php |
/public_html/cake/ |
/public_html/plugins/ |
/public_html/vendors/ |
/public_html/.htaccess |
/public_html/index.php |
以下、構成変更後のツリーです。
/cakephp/app/ |
/cakephp/app/webroot/ |
/cakephp/cake/ |
/cakephp/plugins/ |
/cakephp/vendors/ |
/cakephp/.htaccess |
/cakephp/index.php |
/public_html/css/ |
/public_html/img/ |
/public_html/js/ |
/public_html/.htaccess |
/public_html/index.php |
繰り返しになりますが、「/public_html」が公開フォルダで「/cakephp」が非公開フォルダです。
この場合、「/cakephp/app/webroot/」は不要になるわけです。フレームワークの知識がない人でも、違和感なく「/public_html/img」の画像ファイルなどを編集できるのも利点ですよね。
この移行方法は、インストール時に限らず、運用後にも実施できます。