[CodeIgniter] .htaccessのリダイレクトを使って新旧サイトを混在させる
CodeIgniterで作った既存のシステムと、新しく作ったCodeIgniterシステムを共存させるやり方です。バージョン2系とバージョン3系の混在も可能です。
更新日: 2018.7.17公開日: 2017.11.17
ディレクトリ構成
まずは、ディレクトリ構成から見ていきます。
すでにある分は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以外のディレクトリ
- ci3/index.phpに変数付きでアクセス(ただし、blogディレクトリだったら無視)
- ci3/index.phpの設定に従って、ci3/application内のプログラムを処理
blogディレクトリ
- ci3/index.phpに変数付きでアクセス
- blogディレクトリなので、 ルール1のリダイレクト処理は無視
- ルール2のリダイレクト処理
- ci3/old/index.phpに変数付きでアクセス
- ci3/old/index.phpの設定に従って、ci3/old/application内のプログラムを処理
という感じになります。
残りの作業
このままだと、ヘッダーやフッターなどの共通部分が全く違うものになって気持ち悪いので、そこは新バージョンのものを旧バージョンへコピペするなりして対処する必要があります。
完璧な方法とは言えませんが、新旧バージョンを混在させる方法でした。