CakePHPを利用する場合、そのサーバーのDocument Rootにインストールしてしまうのが一番手っ取り早いのですが、場合によってはDocument Rootを他のツールやコンテンツで利用したいために、他のパスで動作させたいということがあったりします。
ということで、元々Document Rootで動かしていたCakePHPを別のパスで動くようにお引越しした際の備忘録です。
環境は、CakePHP2.3.7+Apache2.2.15で動かしています。
CakePHPをDocument Root以外で動かす
まず、CakePHPは下記のパスにインストールされているとします。
/var/www/cakephp
DocumentRootでCakePHPを動かしていた頃のApacheの設定ファイル(httpd.conf)のVirtualHostは下記のようにしていました。
<VirtualHost *:80> ServerAdmin webmaster@example.com DocumentRoot /var/www/cakephp/app/webroot ServerName www.example.com ErrorLog logs/error_log CustomLog logs/access_log combined </VirtualHost>
DocumentRoot以外でCakePHPを動かすので、URL上でのCakePHPのパスを決めなくてはなりません。
今回は、「http://www.example.com/apps/」でCakePHPが動くように設定をしたいと思います。
合わせて、DocumentRootを他のコンテンツが表示されるように置き換えるので、まずはApacheの設定ファイルを下記のように編集します(編集後は要Apache再起動)。
<VirtualHost *:80> ServerAdmin webmaster@example.com DocumentRoot /var/www/html ServerName www.example.com ErrorLog logs/error_log CustomLog logs/access_log combined Alias /apps/ /var/www/cakephp/app/webroot/ </VirtualHost>
これで、DocumentRootのパスはCakePHP以外のディレクトリに移り、Aliasによって/appsにアクセスがあるとCakePHPのディレクトリが参照されるようになります。
次に、CakePHPのインストールディレクトリ以下にある.htaccessファイルを編集します。
これは、下記の3つのパスにそれぞれ存在します。
/var/www/cakephp/.htaccess /var/www/cakephp/app/.htaccess /var/www/cakephp/app/webroot/.htaccess
追加する設定は、mod_rewriteの下記の設定で、URLの基点となるパスを指定しておきます。
RewriteBase /apps
例えば、/var/www/cakephp/app/webroot/.htaccessのファイルには下記のように設定します。
<IfModule mod_rewrite.c> RewriteEngine On RewriteBase /apps RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^(.*)$ index.php [QSA,L] </IfModule>
これだけで一通りの設定が完了です。
http://www.example.com/apps/コントローラ名/アクション名
にアクセスすれば、今までのページが見えるようになっているはずです。
ちなみに、画像ファイルやJavaScript、CSSなどのパスもそれぞれ/apps以下となるため、直接パスを書いているテンプレートやレイアウトファイルなどは一通り編集する必要があります。
変更したURLを元のパスに戻す
これは余談ではあるんですが、今回の目的はDocumentRootを他のコンテンツのために明け渡したいということであって、決してURLのパスを変えたいというものではありません。
そこで、Apacheの設定ファイルに下記のようにAliasを設定することで、DocumentRootをCakePHPが使わなくても元々のパスを使い続けることができます。
Alias /apps/ /var/www/cakephp/app/webroot/ Alias /foo/ /var/www/cakephp/app/webroot/
/fooはCakePHPのコントローラ名です。
前述の設定により、通常は
http://www.example.com/apps/foo/bar
というアクセスをしなければならないのを、
http://www.example.com/foo/bar
という元々のパスに戻すことができます。
ただし、コントローラごとにAliasを設定しなくてはならないのと、CakePHPの画像ディレクトリ(/img)やJavaScriptディレクトリ(/js)やCSSディレクトリ(/css)などは一般的過ぎる名前のため、Aliasの設定はしないほうが無難かもしれません(他のDocumentRootを使うコンテンツと競合するので)
今回の設定変更は、先ほどのmod_rewriteでのRewriteBaseの追加により、http://www.example.com/foo/barのURLでアクセスをしてもベースとなるURLを/appsに置き換えられて内部的にリクエストが投げられるため、URLをごまかすことができます。
URLを変更する影響が大きい場合は、このように設定してもよいかもしれません。
[PR]
[PR]
関連記事
CakePHPでHtmlHelperを使って開いているページのURLを取得する
CakePHPのデフォルトレイアウト「default.ctp」を読み解く
CakePHPでアプリケーション独自の設定ファイルを利用する