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

更新日: 2016年2月25日

実行時間: 0.0732

URI 設定

 CodeIgniterを含めほとんどのPHPフレームワークでは、全てのアクセスをフロントコントローラが受け持ちます。 そして、URIのフロントコントローラ(index.php)につづくパスやクエリ文字列によって、 処理されるクラスやアクションメソッドが決定されます。この一連の流れを「ルーティング」と言います。

 CodeIgniterのデフォルトでは、index.phpにつづくパス文字列によってルーティングが行われます。

  • 例:
  • http://your.site/index.php/[Controller]/[Action]/[Parameter1]/[Parameter2]/

「Controller」は「Class」、「Action」は「method」、「Parameter」は「methodの引数データ」として処理されることになります。

自然な URI

 index.phpにパスを続ける形式のURIでも、動作自体には何ら問題ありませんが、美しくありません。 美しくないと言う事は「SEO」的にも良くないと言う事になります。

 やはり、下記のような自然なURIの方がしっくりきます。

    http://your.site/[Controller]/[Action]/[Parameter1]/[Parameter2]/

mod_rewrite 一番上に戻る

 自然なURIでCodeIgniterを動作させるには、「mod_rewrite」の力を借りることになります。 当然のことながら、「mod_rewrite」が利用できる環境でなければいけません。

 以下が、「mod_rewrite」の最低限の設定方法です。

    • .htaccess
    RewriteEngine on
    RewriteCond $1 !^index\.php
    RewriteRule ^(.*)$ /index.php/$1 [L]
    • httpd.conf
    RewriteEngine on
    RewriteCond $1 !^/index\.php
    RewriteRule ^(.*)$ /index.php/$1 [L]
  • RewriteEngine on
    • mod_rewriteを有効にしています。
  • RewriteCond $1 !^/index\.php
    • URIの書き換えルールから除外するURI文字列の設定です。
  • RewriteRule ^(.*)$ /index.php/$1 [L]
    • URIの書き換えルールの設定です。RewriteCondで指定したものを除く全てをindex.phpの後ろにつづけたURIに書き換えたものとして処理されます。

RewriteCond 一番上に戻る

 「index.php」は必ず「RewriteCond」で書き換えルールから除外する必要があります。
これをしないとURIの書き換えが無限にループしてしまいます。

 通常は、「index.php」以外にも書き換えルールから除外する必要なものがあるでしょう。
画像やJavaScriptファイル、スタイルシート等です。
 これらを書き換えルールから除外するには以下のようにします。

    • .htaccess
    RewriteEngine on
    RewriteCond $1 !^(index\.php|images|javascripts|stylesheets|robots\.txt|favicon\.ico)
    RewriteRule ^(.*)$ /index.php/$1 [L]
    • httpd.conf
    RewriteEngine on
    RewriteCond $1 !^/(index\.php|images|javascripts|stylesheets|robots\.txt|favicon\.ico)
    RewriteRule ^(.*)$ /index.php/$1 [L]
注:
httpd.confの設定では「RewriteCond」の「^」記号と「(」の間の「/」スラッシュが必要となります。 「/」が無いと「/index.php」にマッチせず無限リダイレクトとなってしまいます。

 この設定での「images」「javascripts」「stylesheets」はドキュメントルート配下にあるディレクトリとなります。  宜、環境に合わせて設定してください。

    webapp/htdocs
              |- /images/
              |- /javascripts/
              |- /stylesheets/
    

URI PROTOCOL 設定 一番上に戻る

 上記の設定で、基本設定は完了し、ブラウザからアクセスすると正常に「Welcome to CodeIgniter!」のページが 表示されると思います。
 しかし、mod_rewriteを利用する場合、ログ「application/logs/log-yyyy-mm-dd.php」ファイルに下記のような「Warning」 が出力されてしまいます。

    --> Severity: Warning --> strpos(): Empty delimiter …

これは、CodeIgniterのちょっとしたバグになりますが、動作には影響ありません。しかし、気になる方は下記の設定で「Warning」が出力されなくなります。

  • application/config/config.php
  • //$config['uri_protocol'] = 'AUTO';
    $config['uri_protocol'] = 'PATH_INFO';