CodeIgniterで404エラーが出る原因と対処法!初心者向け徹底解決ガイド
生徒
CodeIgniterで開発中にブラウザを開いたら404エラーが出てしまい、ページが表示されません。
先生
404エラーはウェブサイトでよく見るエラーですね。これは指定したページが見つからないことを示しています。
生徒
ファイルは作ったはずなのにどうして見つからないのでしょうか?原因を教えてください。
先生
いくつか代表的な理由があります。一緒に原因を特定して解決していきましょう。
1. 404エラーとは何かを理解しよう
404エラーとは、インターネット上の通信において、サーバー側に指定されたURL(Webページの住所)に対応するファイルやコンテンツが見つからないときに表示される「Not Found」という状態を指します。CodeIgniterを利用している場合、PHPプログラムで作成したコントローラー(処理の司令塔)やメソッド(実行する機能)への呼び出しが正しく伝わっていないと、このエラーが発生します。まずは、ブラウザのアドレスバーに入力したURLが、正しいルールに従っているか確認することが大切です。
2. ルーティング設定を確認する
CodeIgniterにおいて、URLとプログラムの実行箇所を結びつける仕組みをルーティングといいます。初心者が最もハマりやすいのが、この設定ミスです。例えば、新しいページを作ったのに、ルーティングファイルでそのURLが定義されていない場合、システムは「そんなページは存在しません」と判断して404エラーを返します。ルーティングファイルは「app/Config/Routes.php」という場所にあるので、一度中身をのぞいてみましょう。
$routes->get('hello', 'Home::index');
// 上記のように書くことで、ドメイン/helloにアクセスするとHomeコントローラーのindexメソッドが動きます
3. コントローラー名とメソッド名のスペルチェック
プログラムの世界では、英単語のスペル一つで動作しなくなることが多々あります。コントローラーのクラス名やメソッド名が、URLで指定している名前と一致しているか、一文字ずつ確認してください。特に大文字と小文字は別の文字として区別される環境も多いため、大文字小文字の区別を含めて完全に一致しているかチェックすることが重要です。ファイルの名前が「HelloWorld.php」なのに、呼び出すとき「helloworld」と打っているだけでもエラーになる可能性があります。
namespace App\Controllers;
class UserProfile extends BaseController
{
public function showInfo()
{
return 'ユーザー情報ページです';
}
}
// この場合、URLは サイトのドメイン/userprofile/showinfo となる必要があります
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. ファイルの配置場所とネームスペース
CodeIgniterでは、コントローラーは必ず「app/Controllers」というフォルダの中に配置しなければなりません。また、ファイルの冒頭で定義しているネームスペース(名前空間)がフォルダの構造と一致していることも重要です。ネームスペースとは、プログラムのクラスを整理するための「名前のグループ」のようなものです。例えば、コントローラーのファイルなのに「App\Models」と書いてあると、システムがファイルを見つけられず、結果として404エラーやクラスが見つからないというエラーにつながります。
namespace App\Controllers; // ここが正しい配置場所と合っているか確認!
class News extends BaseController
{
public function index()
{
return 'ニュース一覧です';
}
}
6. サーバー上のパーミッション問題
最後に、あまり頻繁ではありませんが、ファイルそのものに読み取り権限がないというケースがあります。Linuxなどのサーバーでは、ファイルに対して「誰が読み書きできるか」という権限(パーミッション)が設定されています。もしプログラムファイルがWebサーバーからアクセスできない設定になっていると、ファイルが存在していてもシステムは「ないもの」として扱い、404エラーを返します。ファイルの権限が正しく設定されているか、管理者の方やレンタルサーバーの管理画面から確認してみてください。