URI 設定
CodeIgniterを含めほとんどのPHPフレームワークでは、全てのアクセスをフロントコントローラが受け持ちます。 そして、URIのフロントコントローラ(index.php)につづくパスやクエリ文字列によって、 処理されるクラスやアクションメソッドが決定されます。この一連の流れを「ルーティング」と言います。
CodeIgniterのデフォルトでは、index.phpにつづくパス文字列によってルーティングが行われます。
- 例:
「Controller」は「Class」、「Action」は「method」、「Parameter」は「methodの引数データ」として処理されることになります。
自然な URI
index.phpにパスを続ける形式のURIでも、動作自体には何ら問題ありませんが、美しくありません。 美しくないと言う事は「SEO」的にも良くないと言う事になります。
やはり、下記のような自然なURIの方がしっくりきます。
mod_rewrite 一番上に戻る
自然なURIでCodeIgniterを動作させるには、「mod_rewrite」の力を借りることになります。 当然のことながら、「mod_rewrite」が利用できる環境でなければいけません。
以下が、「mod_rewrite」の最低限の設定方法です。
- .htaccess
- httpd.conf
- RewriteEngine on
- mod_rewriteを有効にしています。
- RewriteCond $1 !^/index\.php
- URIの書き換えルールから除外するURI文字列の設定です。
- RewriteRule ^(.*)$ /index.php/$1 [L]
- URIの書き換えルールの設定です。RewriteCondで指定したものを除く全てをindex.phpの後ろにつづけたURIに書き換えたものとして処理されます。
RewriteCond $1 !^index\.php
RewriteRule ^(.*)$ /index.php/$1 [L]
RewriteCond $1 !^/index\.php
RewriteRule ^(.*)$ /index.php/$1 [L]
RewriteCond 一番上に戻る
「index.php」は必ず「RewriteCond」で書き換えルールから除外する必要があります。
これをしないとURIの書き換えが無限にループしてしまいます。
通常は、「index.php」以外にも書き換えルールから除外する必要なものがあるでしょう。
画像やJavaScriptファイル、スタイルシート等です。
これらを書き換えルールから除外するには以下のようにします。
- .htaccess
- httpd.conf
RewriteCond $1 !^(index\.php|images|javascripts|stylesheets|robots\.txt|favicon\.ico)
RewriteRule ^(.*)$ /index.php/$1 [L]
RewriteCond $1 !^/(index\.php|images|javascripts|stylesheets|robots\.txt|favicon\.ico)
RewriteRule ^(.*)$ /index.php/$1 [L]
この設定での「images」「javascripts」「stylesheets」はドキュメントルート配下にあるディレクトリとなります。 宜、環境に合わせて設定してください。
webapp/htdocs |- /images/ |- /javascripts/ |- /stylesheets/
URI PROTOCOL 設定 一番上に戻る
上記の設定で、基本設定は完了し、ブラウザからアクセスすると正常に「Welcome to CodeIgniter!」のページが
表示されると思います。
しかし、mod_rewriteを利用する場合、ログ「application/logs/log-yyyy-mm-dd.php」ファイルに下記のような「Warning」
が出力されてしまいます。
これは、CodeIgniterのちょっとしたバグになりますが、動作には影響ありません。しかし、気になる方は下記の設定で「Warning」が出力されなくなります。
- application/config/config.php
$config['uri_protocol'] = 'PATH_INFO';