目次
環境
Codeigniter : 3.1.8
はじめに
普段は、Codeigniterを使ってシステム開発をしています。
いつもサイトを作る時には、URLにindex.phpが付与されていました。
example.com/index.php/news/article
取った方が見栄えが良くなるけど、以前までのやり方だと運用が面倒になったり、不具合が出るため諦めていました。
よく紹介されているやり方(古い)
RewriteEngine on RewriteCond $1 !^(index\.php|images|robots\.txt) RewriteRule ^(.*)$ /index.php/$1 [L]
Codeigniter-2 のドキュメントに記載されていたやり方です。
上記を.htaccessに設定します。
この場合、新しいディレクトリを作るたびに2行目に例外設定を書き込まないといけないので、運用が面倒でした。
最近のやり方(不足あり)
RewriteEngine On RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^(.*)$ index.php/$1 [L]
Codeigniter-3のドキュメントに記載されたやり方です。
上記を.htaccessに設定します。
普段使うレンタルサーバーだとエラーが出ます。(共用サーバーなのが原因?
また、第二セグメントを省略した時に403エラーになってしまいます。
example.com/controller/
第二セグメント省略時の関数指定
通常Codeiniterは、第二セグメントを省略するとindex関数が指定されます。
つまり以下のURLが指定されます。
example.com/controller/index
しかし、Codeigniter-3のドキュメントの通りに設定すると、index関数が付与されません。
せめて404エラーが出てくれば気にせずいけたのですが、403エラーが出てしまいます。
管理人のやり方
以上を踏まえて、管理人の設定方法は以下になります。
htaccessの設定
RewriteEngine On RewriteBase / RewriteRule ^index\.php$ - [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^(.*)$ index.php [L] RewriteRule ^(.*)/$ $1/index.html [L]
上記を.htaccessに設定します。
大体の設定は、Codeigniter-3の公式ドキュメントに記載されたやり方と一緒です。
(1)ベースとなるディレクトリを明示
RewriteBase /
これを設定しないと上手く動かないレンタルサーバーがあるため設定しています。
お名前.comとかでディレクトリに設定したい時は、これが必須です。
ちなみに、hogeディレクトリを指定したい場合は、下記の様にします
RewriteBase /hoge/
もちろん削除して問題がなければ、あえて記載する必要はないです。
(2)レンタルサーバー対策
RewriteRule ^(.*)$ index.php [L]
公式設定の/$1を削除
これを削除すると大概のレンタルサーバーで動きます。
以下検証済みレンタルサーバー
(3)第二セグメント省略時の403エラー対策
RewriteRule ^(.*)/$ $1/index.html [L]
この設定をしておくと、method部を省略した時に403エラーを404エラーにすることができます。
これで.htaccessの設定は完了です。
Config.phpの設定
管理人が説明するまでも無く、数多の解説サイトがありますが・・・
site_url()を使用するとindex.phpが付与されてしまいます。
なので、以下の設定を行って、付与されないようにします。
application/config/config.phpに以下の記述を変更します。
$config['index_page'] = 'index.php';
$config['index_page']のindex.phpを削除します。
$config['index_page'] = '';
こんな感じでOKです。
これで設定は完了です。
今日はこの辺でー