[CodeIgniter] .htaccessのリダイレクトを使って新旧サイトを混在させる

CodeIgniterで作った既存のシステムと、新しく作ったCodeIgniterシステムを共存させるやり方です。バージョン2系とバージョン3系の混在も可能です。

ディレクトリ構成

まずは、ディレクトリ構成から見ていきます。

すでにある分はoldディレクトリにそのまま移動させ、トップレベルに新バージョンのCodeIgniterプログラムを展開します。

このあたりは好みもあるので、自由に変えても構わないと思います。個人的には、旧バージョン最終的に消したいのでoldディレクトリに入れました。

ci3
└── application
      └── core
      └── helpers
      └── hooks
      └── libraries
      └── third_party
└── system
└── index.php
└── old
      └── application
      └── system
      └── index.php

こんな感じになります。

サンプルでは、oldシステムのほうで使われるコントローラは、「blog」コントローラのみ、つまりexample.com/blog/以下にアクセスされた時だけ旧バージョンを使う前提としています。

.htaccessにリダイレクト設定を追記

先に答えを出しておくと、

#新しいCodeIgniter用 (ルール1)
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} !(^/blog/) //blogディレクトリを除外
RewriteRule ^(.+)$ index.php?/$1 [L]

#古いCodeIgniter用 (ルール2)
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.+)$ old/index.php?/$1 [L]

このようになります。

では、リダイレクトの流れを見ていきます。

blog以外のディレクトリ

  1. ci3/index.phpに変数付きでアクセス(ただし、blogディレクトリだったら無視)
  2. ci3/index.phpの設定に従って、ci3/application内のプログラムを処理

blogディレクトリ

  1. ci3/index.phpに変数付きでアクセス
  2. blogディレクトリなので、 ルール1のリダイレクト処理は無視
  3. ルール2のリダイレクト処理
  4. ci3/old/index.phpに変数付きでアクセス
  5. ci3/old/index.phpの設定に従って、ci3/old/application内のプログラムを処理

という感じになります。

残りの作業

このままだと、ヘッダーやフッターなどの共通部分が全く違うものになって気持ち悪いので、そこは新バージョンのものを旧バージョンへコピペするなりして対処する必要があります。


完璧な方法とは言えませんが、新旧バージョンを混在させる方法でした。