2013年5月9日木曜日

【CakePHP】ドキュメントルート以外に配置して Alias する

今まで CakePHP のディレクトリ一式をドキュメントルート下に配置して以下ようにアクセスしていた
http://ipaddress/cakephp/コントローラ名/アクション

/var/www/html        (ドキュメントルート)
    └/cakephp  (CakePHPファイル一式)

しかし、ドキュメントルートの下は何かとごちゃごちゃするし、CakePHP のファイル一式を別のディレクトリに配置して、Apache の Alias を設定してドキュメントルートから切り離したくなった。

というわけで、以下のような感じにしてみようと思う。
アクセスURL: http://ipaddress/cake/コントローラ名/アクション

/var/www      
  └/html    (ドキュメントルート)
  └/cakephp  (CakePHPファイル一式)

まずは、ドキュメントルートと同階層の /var/www 下に cakephp ディレクトリを丸ごとコピー

そして、Apache の設定
/etc/httpd/conf.d に cakephp.conf を作成する

Alias /cake /var/www/cakephp
<Directory "/var/www/cakephp">
#       Options Indexes FollowSymLinks
        Options FollowSymLinks
        AllowOverride All
        Order allow,deny
        Allow from all
</Directory>


これでOKと思い、早速、WelComeページ(http://ipaddress/cake/)にアクセスしてみる
なんかおかしい・・・
The requested URL /var/www/cakephp/app/webroot/ was not found on this server.
あれれ・・・

mod_rewrite あたりが怪しい気がする

いろいろ調べたら、CookBookにも書いていたが、
 RewriteBaseステートメントをCakePHPが使う.htaccessファイル(/.htaccess、/app/.htaccess、/app/webroot/.htaccess)に追加する必要があります。
ということらしい。
ドキュメントルート下に配置した場合はそのまま変更しないでよかったが、言われたとおりにやってみる
(詳しいことは調べてない)

cakephp/.htaccess
<IfModule mod_rewrite.c>
   RewriteEngine on
   RewriteBase    /cake                ←この行追加
   RewriteRule    ^$ app/webroot/    [L]
   RewriteRule    (.*) app/webroot/$1 [L]
</IfModule>


cakephp/app/.htaccess
<IfModule mod_rewrite.c>
    RewriteEngine on
    RewriteBase    /cake/app      ←この行追加
    RewriteRule    ^$    webroot/    [L]
    RewriteRule    (.*) webroot/$1    [L]
</IfModule>




cakephp/app/webroot/.htaccess
<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteBase /cake/app/webroot    ←この行追加
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^(.*)$ index.php [QSA,L]
</IfModule>




以上、3つの .htaccess に RewriteBase を追加することにより、アクセスできるようになりました。





2 件のコメント:

  1. あなたが神です。
    大変貴重な情報をありがとうございます┏○))ペコ

    返信削除