2023年9月12日火曜日

FuelPHPでindex.phpを省略する方法

こんばんは、こうちゃんです。

プログラム言語のひとつで、htmlとの親和性の高さで、サイト制作によく使われる言語のPHPで、高速かつ便利な機能が充実していて近年人気の高まっているフレームワーク、
FuelPHP
このFuelPHPを用いて開発をする時に、
最初にぶつかりがちな壁のひとつの解決方法を解説します。

FuelPHPをサーバーに入れて、初期設定を済ませて、webで見られるようにした時、
最初、URLは、
http://ドメイン名/index.php/コントローラ名/アクション名

のように、URLの中でドメイン名の次に、動作ファイルの名前である、index.phpが入ってしまいます。
通常のサイトで、PHPファイルを配置、見えるようにした時の
http://ドメイン名/index.php
でしたら見えていてもいいですし、外のページも、
例えば、
http://ドメイン名/access.php
みたいに各ページに名前がつくのでindex.phpも見えていても構わないですが、FuelPHPの場合、その続きにコントローラ名、アクション名がつくので、
すべてのURLに変わらずindex.phpがつくのはあまり見栄えのいいものでもありません。
ですが、初期で勝手にこのindex.phpを抜いて

といったURLにアクセスしてもエラーで画面が表示されません。
この場合の、index.phpを除いて
http://ドメイン名/コントローラ名/アクション名
としてアクセスするための方法の解説です。

変更すべき点は3ヶ所で、

1.
fuel/app/config/config.php
の中ですでに用意されていますので、コメントアウトを削るだけです。

 * Set this to 'index.php if you don't use URL rewriting
 */
- //'index_file' => false,
+ 'index_file' => false,

2.
/public/.htaccess
の同じく、すでに用意されているコメントアウトの#を外すだけです。
#Remove index.php from URL
- #RewriteCond %{HTTP:X-Requested-With} !^XMLHttpRequest$
- #RewriteCond %{THE_REQUEST}               ^[^/]*/index\.php [NC]
- #RewriteRule ^index\.php(.*)$         $1 [R=301,NS,L]
+ RewriteCond %{HTTP:X-Requested-With}  !^XMLHttpRequest$
+ RewriteCond %{THE_REQUEST}                ^[^/]*/index\.php [NC]
+ RewriteRule ^index\.php(.*)$          $1 [R=301,NS,L]
コメントアウトを外すだけで対応できます

3.
.htaccessを有効に
これはサーバー設定で、すでに有効化してあれば対応しないで大丈夫です。
上記1.2.を設定しても動かない場合、この対応をしましょう。
まずはapacheの設定
linuxサーバーならばたいていこのパスにある設定ファイル
/etc/httpd/conf/httpd.conf
を編集

<Directory /var/www/>
Options Indexes FollowSymLinks
AllowOverride None
Require all granted
</Directory>

のように、フォルダ設定がある場所で、NoneをAllに変更しましょう。
-AllowOverride None
+AllowOverride All

この変更後、保存して、webサーバー再起動します。
service httpd restart
レンタルサーバーなどでコマンドラインを操作できない場合は、そのレンタルサーバーのサービスごとにあるであろう設定変更の手順やサーバー再起動の箇所を探してください。

以上の対応で、以降Fuelプロジェクトで、

http://ドメイン名/コントローラ名/アクション名

のように、index.phpなしでアクセスできるようになります。
FuelPHP導入時によくハマるあるあるですので、どうぞご参考にしてください。

こうちゃん