すたらブログ

文系Webプログラマの備忘録

CodeIgniterでmod_rewriteを使う時の注意

CodeIgniterのデフォルトで生成されるURLは下記の通り。
example.com/index.php/news/article/my_article
"mode_rewrite"を使えば"index.php"をURLから除去できます。
example.com/news/article/my_article

この設定方法と注意点をメモしておきます。

環境

1. ".htaccess"を作成する

下記を参考に.htaccessを作成してCodeIgniterのフォルダの最上位、index.phpと同階層に設置します。

./.htaccess

<IfModule mod_rewrite.c>
    RewriteEngine on
    RewriteCond $1 !^(index\.php|images|robots\.txt)
    RewriteRule ^(.*)$ index.php/$1 [L]
</IfModule>

【注意点】

ユーザガイドそのままの記述ではうまく動作しなかったので一部変更しています。
変更箇所は下記のとおりです。

(変更前)
RewriteRule ^(.*)$ /index.php/$1 [L]

(変更後)
RewriteRule ^(.*)$ index.php/$1 [L]

"index.php"の前のスラッシュをひとつとっただけです。
CakePHPの".htaccess"ではこう記述されていました。

2. config.phpの"$config['index_page']"を変更する

ユーザガイドには書かれていませんでしたが、これも必要な設定です。
そうしないとURLヘルパーなどで自動生成されるURLに"index.php"が入ってしまいます。
./application/config/config.php

<?php
// 初期値の'index.php'から空白に変更する。
$config['index_page'] = '';