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

CodeIgniterのルーティングで404エラーを制御する方法!初心者向け完全解説

CodeIgniterのルーティングで404エラーを制御する方法
CodeIgniterのルーティングで404エラーを制御する方法

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

生徒

「Webサイトを見ているときに出る『404 Not Found』って何ですか?自分のプログラムでも自由にコントロールできますか?」

先生

「それは『ページが見つかりません』という合図です。CodeIgniterというフレームワークを使えば、エラーが起きた時に出す画面を自分好みにカスタマイズしたり、特定の場所に誘導したりすることができるんですよ。」

生徒

「難しそうですが、初心者でも設定できますか?」

先生

「大丈夫です。ルーティングという仕組みを使えば、迷子になったユーザーを優しく案内できるようになります。基本的な仕組みから一緒に見ていきましょう!」

1. 404エラーとルーティングの基本を知ろう

1. 404エラーとルーティングの基本を知ろう
1. 404エラーとルーティングの基本を知ろう

Webサイトを運営していると、たまに「指定されたページは存在しません」という表示を見かけることがあります。これが404エラーと呼ばれるものです。パソコン初心者の方に分かりやすく例えると、住所を頼りに家を訪ねたけれど、そこには空き地しかなかった、という状態を指します。

PHPの開発フレームワークであるCodeIgniter(コードイグナイター)には、この「住所(URL)」と「実際に動かすプログラム(コントローラー)」を紐付ける役割を持つルーティング(Routing)という機能があります。ルーティングは、いわばWebサイトの「案内図」のようなものです。

ユーザーが案内図に載っていない住所にアクセスしようとしたとき、システムは自動的に「そんなページはないよ!」と判断します。この判断をどう制御するかが、今回学習するメインテーマです。適切な設定をしておくことで、ユーザーがサイト内で迷子になるのを防ぎ、親切なWebサイトを作ることができます。

2. Routes.phpでエラーの行き先を決める

2. Routes.phpでエラーの行き先を決める
2. Routes.phpでエラーの行き先を決める

CodeIgniterでルーティングを管理しているのは、主に「Routes.php」という名前のファイルです。このファイルの中に設定を書き込むことで、404エラーが発生した際にどのプログラムを動かすかを指定できます。

プログラミング未経験の方は「ファイルの中にコードを書く」と聞くと身構えてしまうかもしれませんが、ルールはとてもシンプルです。特定の命令(メソッド)を使って、エラー時の行き先を指定してあげるだけです。デフォルトでは標準のエラー画面が表示されますが、これをオリジナルの画面に差し替えるのが最初のステップとなります。

まずは、最も基本的な404エラーのオーバーライド(上書き設定)の方法を見てみましょう。下記のコードは、エラーが発生したときに「Errors」というコントローラーの中にある「show404」という処理を呼び出す設定例です。


// routes.php の設定例
// ページが見つからない時に動かすコントローラーとメソッドを指定します
$routes->set404Override('App\Controllers\Errors::show404');

3. 404エラー専用のコントローラーを作成する

3. 404エラー専用のコントローラーを作成する
3. 404エラー専用のコントローラーを作成する

設定ファイルで行き先を決めたら、次は実際に動くプログラム(コントローラー)を作りましょう。コントローラーとは、Webサイトの「司令塔」のような存在です。ユーザーからのリクエストを受け取り、どの画面を表示するかを決定します。

ここでは、エラー画面を表示するためだけのシンプルな司令塔を作ります。プログラムコードは難しく見えますが、「class」はプログラムのまとまり、「public function」は具体的なお仕事の内容だと考えてください。以下の例では、エラー画面を表示するというお仕事を定義しています。


namespace App\Controllers;

use CodeIgniter\Controller;

class Errors extends Controller
{
    public function show404()
    {
        // 404のステータスコードを返しながら、オリジナルの画面を表示します
        return view('errors/custom_404');
    }
}

このコードを作成することで、存在しないURLにアクセスがあった際、自動的に custom_404 という名前の見た目用ファイル(ビュー)が呼び出されるようになります。標準の真っ白な画面よりも、自分のサイトのデザインに合わせた画面が出たほうがユーザーも安心しますよね。

4. ユーザーに優しいカスタムエラー画面(View)の作成

4. ユーザーに優しいカスタムエラー画面(View)の作成
4. ユーザーに優しいカスタムエラー画面(View)の作成

次に、ユーザーが実際に目にする「見た目」の部分を作りましょう。CodeIgniterではこれをビュー(View)と呼びます。ビューは主にHTMLという、Webページの骨組みを作る言葉で書かれます。

パソコンを初めて触る方でも、文字を打つ感覚で作成できます。「お探しのページは見つかりませんでした」「トップページへ戻る」といったメッセージを配置するのが一般的です。ただエラーを伝えるだけでなく、次にどこへ行けばいいかを示してあげることが大切です。


<div class="container text-center mt-5">
    <h1 class="display-1 fw-bold text-danger">404</h1>
    <p class="fs-3">申し訳ありません。ページが見つかりません。</p>
    <p class="lead">
        お探しのページは削除されたか、URLが間違っている可能性があります。
    </p>
    <a href="/" class="btn btn-primary">トップページへ戻る</a>
</div>

このように、ボタンを配置してトップページへ誘導することで、ユーザーがサイトから離脱してしまうのを防ぐことができます。SEO(検索エンジン最適化)の観点からも、エラーページを放置せずに適切に処理することは非常に重要です。

5. 条件分岐を使って特定の404をハンドリングする

5. 条件分岐を使って特定の404をハンドリングする
5. 条件分岐を使って特定の404をハンドリングする

時には、すべてのエラーを一箇所に送るのではなく、特定の条件のときだけ違う処理をしたい場合があります。例えば、ブログの記事が見つからない時と、管理画面のページが見つからない時で案内を変えたい場合などです。

ここで登場するのがif文(条件分岐)です。プログラムの中で「もし〜ならA、そうでなければB」という判断を行わせます。プログラミングの基本中の基本ですが、CodeIgniterのルーティング制御でもこの考え方が応用できます。

以下の例では、もしアクセスされたURLに「admin」という文字が含まれていれば、管理者専用のエラー処理を行い、それ以外なら一般用のエラー処理を行うといった分岐のイメージです。


// コントローラー内での条件分岐の例
public function handleNotFound($path)
{
    if (strpos($path, 'admin') !== false) {
        // 管理画面系でエラーが起きた場合
        return view('errors/admin_404');
    } else {
        // 一般公開サイトでエラーが起きた場合
        return view('errors/public_404');
    }
}

6. 存在しないページを自動的に転送(リダイレクト)させる

6. 存在しないページを自動的に転送(リダイレクト)させる
6. 存在しないページを自動的に転送(リダイレクト)させる

404エラーを表示させるのではなく、強制的に別のページへ移動させてしまう方法もあります。これをリダイレクトと呼びます。例えば、古いサイトから新しいサイトへ引っ越しをした時などに、古いURLに来た人を自動で新しいページへ連れて行ってあげる仕組みです。

リダイレクトは非常に強力なツールですが、使いすぎるとユーザーが「自分がどこにいるのか」分からなくなってしまうため、注意が必要です。しかし、特定のキャンペーンページが終わった後にトップページへ自動で戻したい場合などは非常に便利です。

ルーティング設定で addRedirect という機能を使うと、存在しない場所へのアクセスを賢くコントロールできます。これにより、エラー画面を見せることなくスムーズなサイト体験を提供できます。

7. 404エラーを放置するとどうなる?SEOへの影響

7. 404エラーを放置するとどうなる?SEOへの影響
7. 404エラーを放置するとどうなる?SEOへの影響

なぜここまで404エラーの制御にこだわるのでしょうか?それは、Googleなどの検索エンジンがあなたのサイトを評価する際のポイントになるからです。SEO(検索エンジン最適化)とは、検索結果で自分のサイトを上位に表示させるための工夫のことです。

リンク切れ(クリックしてもページがない状態)が放置されていると、検索エンジンのロボットが「このサイトは管理が行き届いていないな」と判断し、評価を下げてしまうことがあります。また、ユーザーが不快に感じてすぐにサイトを閉じてしまうこともマイナス評価に繋がります。

CodeIgniterのルーティング機能を使って正しくエラーを制御することは、プログラミング技術の向上だけでなく、多くの人にサイトを見てもらうための「おもてなし」の心を形にすることなのです。未経験の方も、まずは簡単な設定から始めて、徐々に複雑な制御に挑戦してみましょう。

8. 実際に動かして確認してみよう

8. 実際に動かして確認してみよう
8. 実際に動かして確認してみよう

設定が終わったら、最後に必ず動作確認を行いましょう。ブラウザの住所欄に、わざと存在しない適当な文字(例:your-site.com/abcde)を入力してエンターキーを押してみてください。自分で作ったカスタムエラー画面が表示されれば成功です!

もし意図した画面が出ない場合は、スペルミスがないか、ファイルの保存場所が間違っていないかを確認しましょう。プログラムの世界では、小さな「点」や「記号」一つで動きが変わってしまいます。でも、その間違いを見つけて直す作業こそが、プログラミング上達の近道です。


(実行結果のイメージ)
ブラウザの画面に「申し訳ありません。ページが見つかりません。 [トップページへ戻るボタン]」
という自分だけのデザインが表示される。

これで、CodeIgniterを使った404エラーの制御ができるようになりました。この基本をマスターすれば、より高度なWebアプリケーション開発への第一歩を踏み出したことになります。これからも楽しくコードを書いていきましょう!

カテゴリの一覧へ
新着記事
New1
CodeIgniter
CodeIgniterでRESTful API開発!初心者でもわかる全体構成ガイド
New2
Symfony
Symfonyのコントローラとは?作成・構造・役割を初心者向けにやさしく解説!
New3
Symfony
Symfonyでバリデーションメッセージを多言語対応する方法!初心者でもわかる国際化の基本
New4
Symfony
Symfonyのキャッシュ機構の基本を理解しよう(HTTPとアプリ別)
人気記事
No.1
Java&Spring記事人気No1
Laravel
Laravelのシングルアクションコントローラとは?使い方と利点
No.2
Java&Spring記事人気No2
Laravel
Laravelで動的パラメータをルートに渡す方法!初心者にもやさしいルートパラメータの使い方入門
No.3
Java&Spring記事人気No3
Laravel
LaravelのBlade構文まとめ!@if @foreach など基本ディレクティブ解説
No.4
Java&Spring記事人気No4
Laravel
Laravelでキャッシュを使う方法(ファイル・Redis・Memcached)
No.5
Java&Spring記事人気No5
Laravel
Laravelで名前付きルートを設定する方法!初心者でもわかるroute()関数の使い方
No.6
Java&Spring記事人気No6
Laravel
Laravelのマイグレーション履歴を確認する方法を徹底解説!migrate:statusの使い方
No.7
Java&Spring記事人気No7
Symfony
Symfonyの依存性注入(DI)とは?コンストラクタでの注入方法を初心者向けに徹底解説
No.8
Java&Spring記事人気No8
Laravel
Laravelのルート一覧を確認する方法!初心者でもわかるphp artisan route:listの使い方