質問: "front/$1"; ``` CI_VERSIONは3.0.3です。 アドバイス頂けると幸いです。
回答: `$route['default_controller']` に指定できるのは `controller` か `controller/method` だけなので、ディレクトリ名を含めることはできません。CodeIgniter 2.x ではこれができてしまっていたのですが、これは意図しなかった挙動とのことで 3.0 から廃止されました。 > > サブフォルダには、サブフォルダだけを指定した URL のときに呼び出される、 デフォルトコントローラをそれぞれ置くことができます。 デフォルトコントローラの名前は、application/config/routes.php ファイルで指定した名前です。 > > --- 2.x のドキュメント より引用 > > > つまり、`$route['default_controller'] = "welcome";` としておくことで `http://example.com/front/` を `front/Welcome.php` にルーティングできる、というのが正しい挙動になります。 ではルート定義を書けばいいのかというと、現在のルーティング処理では、 `/` へのアクセスに関しては `default_controller` 以外のルート定義を参照していません。そのため `/ -> front/welcome` といったルーティングを行うには、`CI_Router` クラスに手を加える必要が出てきます。 で、この件について現在のメンテナである Andrey Andreev 氏がこんなコメントを残しています。 > > You're looking at controller directories the wrong way - they are not just tools to organize your code, a request's path is supposed to match a real file path. > > If you consider a route to be a "redirect", it might make sense to "redirect" a user's request, but it doesn't make sense to redirect in your index page. > > --- より引用 > > > 今回の場合、URLに合わせたディレクトリ構造にすると以下のようになるでしょうか。 * controller/Welcome.php * controller/Regist.php * controller/admin/Welcome.php * controller/admin/Members.php これなら `routes.php` は簡単です。 ``` // 各ディレクトリに適用される: /->/welcome, /admin->/admin/welcome $route['default_controller'] = 'welcome'; // $route['admin/(:any)'] = 'admin/$1'; も不要 ```