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

CodeIgniterで404エラーが出る原因と対処法!初心者向け徹底解決ガイド

CodeIgniterで404エラーが出るときの原因と対処法
CodeIgniterで404エラーが出るときの原因と対処法

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

生徒

CodeIgniterで開発中にブラウザを開いたら404エラーが出てしまい、ページが表示されません。

先生

404エラーはウェブサイトでよく見るエラーですね。これは指定したページが見つからないことを示しています。

生徒

ファイルは作ったはずなのにどうして見つからないのでしょうか?原因を教えてください。

先生

いくつか代表的な理由があります。一緒に原因を特定して解決していきましょう。

1. 404エラーとは何かを理解しよう

1. 404エラーとは何かを理解しよう
1. 404エラーとは何かを理解しよう

404エラーとは、インターネット上の通信において、サーバー側に指定されたURL(Webページの住所)に対応するファイルやコンテンツが見つからないときに表示される「Not Found」という状態を指します。CodeIgniterを利用している場合、PHPプログラムで作成したコントローラー(処理の司令塔)やメソッド(実行する機能)への呼び出しが正しく伝わっていないと、このエラーが発生します。まずは、ブラウザのアドレスバーに入力したURLが、正しいルールに従っているか確認することが大切です。

2. ルーティング設定を確認する

2. ルーティング設定を確認する
2. ルーティング設定を確認する

CodeIgniterにおいて、URLとプログラムの実行箇所を結びつける仕組みをルーティングといいます。初心者が最もハマりやすいのが、この設定ミスです。例えば、新しいページを作ったのに、ルーティングファイルでそのURLが定義されていない場合、システムは「そんなページは存在しません」と判断して404エラーを返します。ルーティングファイルは「app/Config/Routes.php」という場所にあるので、一度中身をのぞいてみましょう。


$routes->get('hello', 'Home::index');
// 上記のように書くことで、ドメイン/helloにアクセスするとHomeコントローラーのindexメソッドが動きます

3. コントローラー名とメソッド名のスペルチェック

3. コントローラー名とメソッド名のスペルチェック
3. コントローラー名とメソッド名のスペルチェック

プログラムの世界では、英単語のスペル一つで動作しなくなることが多々あります。コントローラーのクラス名やメソッド名が、URLで指定している名前と一致しているか、一文字ずつ確認してください。特に大文字と小文字は別の文字として区別される環境も多いため、大文字小文字の区別を含めて完全に一致しているかチェックすることが重要です。ファイルの名前が「HelloWorld.php」なのに、呼び出すとき「helloworld」と打っているだけでもエラーになる可能性があります。


namespace App\Controllers;

class UserProfile extends BaseController
{
    public function showInfo()
    {
        return 'ユーザー情報ページです';
    }
}
// この場合、URLは サイトのドメイン/userprofile/showinfo となる必要があります

4. .htaccessファイルの設定を確認する

4. .htaccessファイルの設定を確認する
4. .htaccessファイルの設定を確認する

Webサーバー(Apacheなど)を利用している場合、.htaccess(ドット・エイチティーアクセス)という設定ファイルがURLの書き換えを行っています。CodeIgniterで「index.php」をURLから隠す設定をしている場合、このファイルの設定が崩れていると、正しいURLを入力してもWebサーバー側で正しく解釈できず、404エラーを返してしまうことがあります。もし「index.php」をURLに入れると表示されるのに、外すと404になるなら、この設定ファイルが原因です。


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

5. ファイルの配置場所とネームスペース

5. ファイルの配置場所とネームスペース
5. ファイルの配置場所とネームスペース

CodeIgniterでは、コントローラーは必ず「app/Controllers」というフォルダの中に配置しなければなりません。また、ファイルの冒頭で定義しているネームスペース(名前空間)がフォルダの構造と一致していることも重要です。ネームスペースとは、プログラムのクラスを整理するための「名前のグループ」のようなものです。例えば、コントローラーのファイルなのに「App\Models」と書いてあると、システムがファイルを見つけられず、結果として404エラーやクラスが見つからないというエラーにつながります。


namespace App\Controllers; // ここが正しい配置場所と合っているか確認!

class News extends BaseController
{
    public function index()
    {
        return 'ニュース一覧です';
    }
}

6. サーバー上のパーミッション問題

6. サーバー上のパーミッション問題
6. サーバー上のパーミッション問題

最後に、あまり頻繁ではありませんが、ファイルそのものに読み取り権限がないというケースがあります。Linuxなどのサーバーでは、ファイルに対して「誰が読み書きできるか」という権限(パーミッション)が設定されています。もしプログラムファイルがWebサーバーからアクセスできない設定になっていると、ファイルが存在していてもシステムは「ないもの」として扱い、404エラーを返します。ファイルの権限が正しく設定されているか、管理者の方やレンタルサーバーの管理画面から確認してみてください。

カテゴリの一覧へ
新着記事
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
Symfony
TwigのHTMLエスケープとrawフィルタの使い方を完全解説!初心者にもわかるテンプレート表示のコツ
No.6
Java&Spring記事人気No6
Laravel
Laravelのルーティングの基本構文と書き方をやさしく解説!初心者でも理解できるWebルートの仕組み
No.7
Java&Spring記事人気No7
CodeIgniter
CodeIgniterのビュー共通化ガイド!初心者でもわかる部分ビューの読み込みとinclude設計
No.8
Java&Spring記事人気No8
Laravel
Laravelの条件分岐とループ処理をBladeで書く方法