CodeIgniter 3でURLに付加されるindex.phpを外したい(取り除きたい)

結論

ブログに書いていたら長々としてしまったので、結論から。

以下の2つの対応をすることでindex.phpを外すことが出来ます。

1:.htaccessを追加する

index.php と同じ階層に.htaccssを追加して、以下を記述する。

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

2:application/config.phpを編集する

$config[‘index_page’] = ‘index.php’;

となっている箇所を

$config[‘index_page’] = ”;

に変更する。

CodeIgniter 3でウェブアプリケーションを構築すると、URLにindex.phpが付いてしまう

http://example.com/index.php/hogehoge/

CodeIgniterではデフォルトで上記のようなURLを用いてルーティング(必要なコントローラ呼び出し)がされるようになっているようです。

今回の記事はこのURLの中の

index.php

を取り除く為の方法を紹介します。

毎回CodeIgniterの初期設定としてこの作業をせねばならぬだろうと思い、備忘録をかねての投稿です。

困ったときのCodeIgniterユーザガイド

以下にて解説されておりました。素晴らしい。

CodeIgniter の URL – index.phpファイルを外す
http://codeigniter.jp/user_guide/3/general/urls.html#index-php

要は、.htaccessで以下のように書いてあげると良いよ。ということでございました。

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

よっしゃ出来た!と思ったら、意外な落とし穴が…

form_openなどを呼び出すと依然として付加されてしまうindex.php!!!

よしよし、と思いながらチュートリアル「ニュース記事を作成」を行っていた時の事、form_openで出力されるURLになぜかindex.phpが付いてしまうということを発見。

ニュース記事を作成 – フォームを作成する
http://codeigniter.jp/user_guide/3/tutorial/create_news_items.html

form_open関数の出力

<form action=”http://localhost/index.php/news/create” method=”post” accept-charset=”utf-8″>

これは、.htaccss以外にも修正箇所があるのではないかと思い、探って見ました。

application/config.phpの修正が必要だった

application/config.phpを見ていた所、それっぽい設定箇所が38行目にありました。

英語の説明文をGoogle翻訳するとこんな感じの事が書いてあるようです。

通常、これはindex.phpファイルになります。ただし、別の名前に変更している場合を除きます。
mod_rewriteを使用してページを削除する場合は、この変数を空白に設定します。

なるほどmod_rewriteを使用してindex.phpを削除している場合はここを空白にせよ。と。
ということで、この設定箇所からindex.phpを外したらform_openでも表示されなくなりました。

$config[‘index_page’] = ”;

感想

CodeIgniter 3の初心者から抜け出せないまま時が経ってしまった。

長期スパンで学んで行くためにも基本的な部分はこれからもブログにしていこうと思いました。