Rails: CakePHP と同居させる(メモ)
いま、CakePHP で構築された Web サイトがあり、同じドメインのサブ URI に Rails アプリケーションを同居させたいとします。
仮に、そのドメインを example.jp とし、サブ URI を /forum とします。つまり、http://example.jp/foo/bar などにアクセスがあれば従来どおり CakePHP が処理し、http://example.jp/forum/messages などにアクセスがあれば Rails が処理する、という風にしたいということです。
まずは、Rails アプリケーションをデプロイメントします。場所は、/var/rails/forum/current としましょう。
さて、現行の httpd.conf から関係する部分を抜粋します。
DocumentRoot "/var/www/example"
ServerName example.jp
ErrorLog /var/log/httpd/example.error.log
CustomLog /var/log/httpd/example.access.log "combined"
allow from all
Options -Indexes
これを次のように変更します。
DocumentRoot "/var/www/example"
ServerName example.jp
ErrorLog /var/log/httpd/example.error.log
CustomLog /var/log/httpd/example.access.log "combined"
allow from all
Options -Indexes
RackBaseURI /forum
allow from all
AllowOverride all
Options -MultiViews
RackEnv production
PassengerRestartDir /var/rails/forum/shared/tmp
Rails のバージョンは 3 を仮定しているので、RailsBaseURI ではなく RackBaseURI を指定しています。
次に、シンボリックリンクを設定します。
$ ln -s /var/rails/forum/current/public /var/www/example/forum
続いて、/var/www/example/.htaccess を変更します。変更前は、こんな風になっているでしょう。
RewriteEngine on
RewriteBase /
RewriteRule ^$ app/webroot/ [L]
RewriteRule (.*) app/webroot/$1 [L]
変更後は次のようになります。
RedirectMatch permanent ^/forum$ /forum/
RewriteEngine on
RewriteBase /
RewriteRule ^$ app/webroot/ [L]
RewriteCond %{REQUEST_URI} !^/forum/
RewriteRule (.*) app/webroot/$1 [L]