CodeIgniter のルーティングからindex.phpを削除する。

   2019/02/25

CodeIgniterがデフォルトの状態でのルーティング処理は、以下のようなURIになります。

ドメインの後に/index.php/という文字列が入ってしまい、URIが長くなる上SEO的にも望ましくありません。

そこで、ここでは以下のような形の/index.php/が入っていないURIを目指します。

デフォルトルーティングの挙動

CodeIgniterのようなフレームワークでは、コントローラ・アクションに対応したURLを決定する機能を備えています。この機能を「ルーティング」や「URI(URL)ルーティング」と呼びます。

CodeIgniterでは、以下のようなルーティング処理が行われています。

つまり、「Hello」コントローラの「World」アクションにアクセスしたい場合は、以下のようなURLになります。

このルーティング処理を、以下のような形にするのが今回の目的です。

デフォルトルーティングの問題

Codeigniterのデフォルトルーティングのままだと、以下のようなURLにアクセスした際にWebサーバのエラー画面が出ます。

ここはWebサーバのエラー画面ではなく、CodeIgniterエラー画面を出したいところです。

また、一般的にURLが長くなるとSEO的にも不利とされているため、そういった観点からも短いURLを目指すに越したことはありません。

CodeIgniterのルーティングから/index.php/を取り除く設定は、以下の2ステップのみです。

.htaccess の追加

CodeIgniterのフロントコントローラ(index.php)と同じ階層に.htaccess を追加します。

上記の記載により「存在しないファイル、ディレクトリにアクセスした場合は全てindex.phpで処理する」というリダイレクトが設定されています。

また、index.phpをリダイレクト対象から除外することによって、index.phpにアクセスした際に無限リダイレクトが発生するのを防いでいます。

この設定により、CodeIgniterのURIから/index.php/が削除され、http://example.com/hello/world/というアクセスができるはずです。

application/config/config.php の編集

上記mod_writeの設定によりURLからはindex.phpが削除されましたが、もう一つ問題があります。

CodeIgniterにはフォームヘルパーやURLヘルパーなどのようなヘルパー関数が充実しており、

と書くだけで

というタグを生成してくれます。

URLヘルパーの方はこう。

こういったヘルパー関数からindex.phpを削除するためには設定ファイルの編集が必要になります。

CodeIgniterの設定ファイルはapplication/configディレクトリで制御されており、今回の設定はその中のconfig.phpに行います。

application/config/config.phpを開き、index_pageという項目を以下のように編集します。CodeIgniterの3.1.6では28行目に記載されていました。

上記設定により、ヘルパー関数のURLからもindex.phpが削除されます。

 

  • このエントリーをはてなブックマークに追加
  • Pocket

この記事へのコメントはこちら

メールアドレスは公開されませんのでご安心ください。
また、* が付いている欄は必須項目となりますので、必ずご記入をお願いします。

内容に問題なければ、下記の「コメント送信」ボタンを押してください。