FuelPHPでURLからindex.phpを消したい
FuelPHPをドキュメント等を参考にして環境を整えると、URLの構成が
http://localhost/PROJECT_NAME/public/index.php/welcome/hello
な感じで、どのページに行くにしてもindex.phpが入っててちょっち邪魔。
これを
http://localhost/PROJECT_NAME/welcome/hello
にしたい。
FuelPHPの導入解説をされてるサイトや本を見ると.htaccessによる方法が
よく書かれているけど、見てみるとURLにpublicディレクトリが入っている。
http://localhost/PROJECT_NAME/public/index.php/welcome/hello ↓ http://localhost/PROJECT_NAME/public/welcome/hello
こんな感じ。確かにindex.phpは無くなったけれども・・・
できればpublicも取っちゃいたいよね。
恐らくこの場合ってDocumentRootが/var/www/htmlになってるとすると、
/var/www/html └PROJECT_NAME ├docs ├fuel └public
こんな感じの配置になっていると思う。(デフォルトのhttpd.confで行けば)
今回やりたいのは
http://localhost/PROJECT_NAME/welcome/hello
でアクセス出来るようにする事なので、自分が配置した構成は
/var/www/html └PROJECT_NAME ├develop(開発環境) │├docs │├fuel │└public └release(本番環境) ├docs ├fuel └public
こんな感じ。FuelPHPの設定で本番環境と開発環境を切り替える事も出来るけど、
他の都合で使い分けたい事もあるので別ディレクトリとして切る事にした。
http://localhost/PROJECT_NAME
で /var/www/html/PROJECT_NAME/release/public を見に行くにはhttpd.confに
Alias /PROJECT_NAME /var/www/html/PROJECT_NAME/release/public
を追加(場所はDocumentRootの設定下ぐらいが把握しやすくていいと思う)して、
/var/www/html/PROJECT_NAME/release/public のディレクティブも追加してあげる。
その際、後述する.htaccessの設定を有効にする為にAllowOverrideはAllにする事。
次に release/public/.htaccess を編集する。
.htaccessはoil create時に自動で作成されているはずなので無かった場合は
oil create のどこかでエラーが起きていた可能性がある。
追加するのは次の一行で、場所は既にあるRewriteCondの下あたりでOK。
RewriteRule ^(.*)$ /PROJECT_NAME/index.php?/$1 [L]
本などに載っている内容だと /PROJECT_NAME/ に相当する箇所が無いと思うけど
これは今回publicを省略する構成で行ったからなので、最初に紹介したデフォルトの
DocumentRoot構成の場合は
RewriteRule ^(.*)$ index.php?/$1 [L]
で同様にindex.phpが省略出来ます。