カテゴリ: CodeIgniter 更新日: 2026/08/07

CodeIgniterでルーティングが反映されない!原因と解決策を完全ガイド

CodeIgniterでルーティングが反映されない理由とは?
CodeIgniterでルーティングが反映されない理由とは?

先生と生徒の会話形式で理解しよう

生徒

「CodeIgniterでWebサイトを作っているのですが、URLを設定したのにページが表示されなくて困っています。ルーティングが反映されないんです。」

先生

「なるほど、ルーティングの設定ですね。プログラミングを始めたばかりの頃は、URLとファイルの関係がつかみにくくて、つまづきやすいポイントですよ。」

生徒

「はい、設定ファイルを書いたはずなのに、エラー画面が出てしまって……。どうすればいいのでしょうか?」

先生

「ルーティングが動かない原因はいくつか決まっています。一つずつ確認して、解決していきましょう!」

1. ルーティングとは何か?初心者向けの例え

1. ルーティングとは何か?初心者向けの例え
1. ルーティングとは何か?初心者向けの例え

まずは、ルーティングという言葉の意味から整理しましょう。Web開発におけるルーティングとは、Webブラウザのアドレスバーに入力されたURLと、サーバー内にあるプログラム(コントローラー)を紐付ける「道路案内」のような仕組みです。

例えば、あなたが「お問い合わせページ」を作りたいとします。URLを「example.com/contact」にしたい場合、ルーティングを設定することで、サーバーに対して「このURLが来たら、このContactというプログラムファイルを動かしてください」と指示を送るのです。これがないと、サーバーはどのファイルを開けばよいのか分からず、エラーを出してしまいます。

CodeIgniterのようなフレームワークでは、この案内図(ルーティング設定)を一つずつ決めてあげることで、意図した通りのURLでページを表示できるようになります。

2. ルーティング設定ファイルの記述ミスを確認する

2. ルーティング設定ファイルの記述ミスを確認する
2. ルーティング設定ファイルの記述ミスを確認する

CodeIgniterでルーティングがうまく反映されない最も多い原因は、設定ファイルの記述ミスです。設定ファイルは「app/Config/Routes.php」という場所にあります。まずは、ここの書き方が正しいか確認しましょう。

例えば、特定のURLを特定のメソッドに割り当てたい場合、以下のように書きます。このとき、引用符や矢印の書き忘れがよくあります。


$routes->get('contact', 'ContactController::index');

上記のコードは、「/contact」というURLにアクセスが来たら、「ContactController」というファイルの「index」メソッドを動かす、という意味です。もし、コントローラーのスペルが間違っていたり、ファイル名とクラス名が一致していなかったりすると、ルーティングは正しく動作しません。

3. コントローラーのメソッド名とアクセス権限

3. コントローラーのメソッド名とアクセス権限
3. コントローラーのメソッド名とアクセス権限

ルーティング設定が正しくても、呼び出そうとしている先のコントローラー(処理の司令塔となるファイル)に不備があるとページは表示されません。

コントローラー内に定義する「メソッド」は、外部からアクセス可能である必要があります。もしメソッドが「private」や「protected」といったアクセス制限をかけている場合、URL経由で直接呼び出すことはできません。必ず「public」で定義するようにしましょう。


namespace App\Controllers;

class ContactController extends BaseController {
    public function index() {
        return view('contact_view');
    }
}

ここで重要なのは、public function index()のように、メソッドが公開されていることです。もしここがprivateになっていると、ルーティング設定が正しくてもアクセス拒否されてしまいます。

4. .htaccessファイルの設定とサーバー環境

4. .htaccessファイルの設定とサーバー環境
4. .htaccessファイルの設定とサーバー環境

サーバー環境によっては、URLの書き換え(Rewrite)がうまく機能していないことがあります。CodeIgniterでは、「index.php」というファイルをURLから省略するために「.htaccess」という設定ファイルを使うことが一般的です。

もしサーバーの設定で「Mod_rewrite」という機能が有効になっていないと、綺麗なURL(example.com/contact)にアクセスした際に「404 Not Found」エラーが発生します。この場合、一時的に「index.php」を含めたURLでアクセスしてみてください。例えば「example.com/index.php/contact」です。

これで表示されるようであれば、原因はルーティングの設定ではなく、サーバーのURL書き換え設定にあることが分かります。


<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^(.*)$ index.php/$1 [L]
</IfModule>

上記のようなコードがプロジェクトのルートディレクトリにあるか確認してください。これが正常に動くことで、ユーザーにとって分かりやすいURLが実現できます。

5. 名前空間(Namespace)の解決エラー

5. 名前空間(Namespace)の解決エラー
5. 名前空間(Namespace)の解決エラー

PHPの名前空間(Namespace)は、プログラムを整理整頓するための「フォルダ分け」のようなものです。CodeIgniterはファイルを自動的に読み込みますが、名前空間が宣言と一致していないと、ファイルそのものが見つかりません。

例えば、ファイルは「Controllers」フォルダの中にあるのに、宣言が「namespace App\Controllers\Admin;」のように異なっていると、フレームワークはファイルを探し出せません。ルーティングで指定したクラス名と、実際のファイルの場所・名前空間が合致しているか、もう一度確認してみてください。


namespace App\Controllers;

class Home extends BaseController {
    public function index() {
        echo 'ホームページです';
    }
}

基本的なことですが、フォルダ構成と名前空間の階層が合っていることは、CodeIgniterを扱う上で非常に重要なルールです。

6. キャッシュのクリアとデバッグの基本

6. キャッシュのクリアとデバッグの基本
6. キャッシュのクリアとデバッグの基本

プログラムの修正をしたのに、ブラウザに反映されないという場合、キャッシュが影響している可能性があります。ブラウザのキャッシュだけでなく、フレームワーク側で生成されるキャッシュファイルが古い情報を保持していることもあります。

開発中は、CodeIgniterのログファイルを確認する癖をつけましょう。「writable/logs」ディレクトリの中にエラーログが保存されています。ルーティングが反映されないときは、ここに「404 Not Found」や「Class not found」といったヒントが必ず記録されています。エラーログは開発者の最も強い味方です。画面だけで判断せず、まずはログを見る。これがプロへの近道です。

また、ブラウザのシークレットモードでアクセスしてみるのも一つの手段です。キャッシュの影響を受けずに、純粋なサーバーの応答を確認できます。焦らずに一つずつ環境を見直していけば、必ず原因は見つかります。

カテゴリの一覧へ
新着記事
New1
Laravel
Laravelのルートとコントローラを対応付ける方法(名前付きルート)を初心者向けに解説
New2
Symfony
Symfonyで画像やファイルをアップロードする時のバリデーション完全ガイド!初心者でもわかる入力チェックの基本
New3
Laravel
Laravelで言語切替UIを作る!多言語対応(ローカリゼーション)実践ガイド
New4
CodeIgniter
CodeIgniterでローカル開発環境を構築する方法!初心者向け完全ガイド
人気記事
No.1
Java&Spring記事人気No1
CodeIgniter
CodeIgniterのキャッシュ管理を完全ガイド!初心者でもわかるメリットと注意点
No.2
Java&Spring記事人気No2
Symfony
Symfony学習に役立つおすすめドキュメント・教材・リソース一覧【初心者向け】
No.3
Java&Spring記事人気No3
Laravel
Laravelのプロジェクト構造を理解しよう!初心者向けディレクトリ解説
No.4
Java&Spring記事人気No4
CodeIgniter
CodeIgniterとは?特徴・できること・他PHPフレームワークとの違いを完全解説
No.5
Java&Spring記事人気No5
CodeIgniter
CodeIgniterのビュー共通化ガイド!初心者でもわかる部分ビューの読み込みとinclude設計
No.6
Java&Spring記事人気No6
Laravel
Laravelのルーティングの基本構文と書き方をやさしく解説!初心者でも理解できるWebルートの仕組み
No.7
Java&Spring記事人気No7
Symfony
TwigのHTMLエスケープとrawフィルタの使い方を完全解説!初心者にもわかるテンプレート表示のコツ
No.8
Java&Spring記事人気No8
Laravel
Laravelの条件分岐とループ処理をBladeで書く方法