CodeIgniter の URL

デフォルトでは、CodeIgniter の URL はサーチエンジンにも人間にもやさしい設計になっています。URL に標準的な "クエリ文字列" を使うアプローチ(これは動的システムと同じ意味です)を使うのでなく、CodeIgniter は セグメントベースの アプローチを使います:

example.com/news/article/my_article

URI セグメント

URL のセグメントは、Model-View-Controller アプローチに従うなら、一般的に次のようになります:

example.com/class/method/ID
  1. 第1セグメントは呼び出されるコントローラの クラス を表します。
  2. 第2セグメントは呼び出されるクラスの メソッド を表します。
  3. 3番目、および追加のセグメントはコントローラに渡される ID または何かしらの変数を表します。

URI ライブラリURL ヘルパ には URI データを取り扱いやすくする関数・メソッドがあります。加えて、より柔軟性をもたらす機能の URI ルーティング によって、URL は再マッピング可能です。

index.php の削除

デフォルトでは、index.php ファイルが URL に含まれます:

example.com/index.php/news/article/my_article

サーバが URL リライトをサポートしていれば、それを使って簡単にこのファイルを削除できます。サーバによってやり方は異なりますが、とても一般的な2つのwebサーバでの方法を示しましょう。

Apache Web Server

Apache は mod_rewrite 拡張が有効でなくてはなりません。有効なら、.htaccess ファイルでシンプルなルールを使います。 これはそのようなファイルの例ですが、"消去法的な"方法として、存在するアイテム以外すべてをリダイレクトする方法を使っています:

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

この例では、存在するディレクトリおよびファイル以外への HTTP リクエストは index.php ファイルへのリクエストとして取り扱われます。

注釈

この具体例のルールはすべてのサーバ設定で動作するわけではありません。

注釈

外からのアクセスが必要なアセットが上記ルールで除外されていることも確認してください。

NGINX

NGINX では、 location ブロックで try_files ディレクティブを使うことで上記 Apache 設定と同じ効果を得るよう定義できます:

location / {
        try_files $uri $uri/ /index.php/$args;
}

This will first look for a file or directory matching the URI (constructing the full path to each file from the settings of the root and alias directives), and then sends the request to the index.php file along with any arguments.