FuelPHP1.7.2のcontrollerに配置したPHPファイルが表示されない。Apacheのmod_rewriteと.htaccessを調べてみた
目次
NetBeansでFuelPHPのプロジェクトを立ち上げたので、さっそくcontrollerに、hello1.phpに設置してみました。’Hello World!’が表示される、ごく簡単なプログラムです。
<?php class Controller_Hello1 extends Controller { public function action_index() { return 'Hello World!'; } }
controllerに配置したphpファイルが表示されない
NetBeansから見た場合のファイルの配置場所
プロジェクト名/fuel/app/classes/controller/hello1.php
ブラウザでは”Not Found”
hello1の内容を表示させるためには、ブラウザに次のURLを打ち込むことになります
ドメイン名(IPアドレス)/プロジェクト名/hello1/index
すると”Not Found“が…。PHPファイルの表示がされません。
コマンドラインから確認すると、ファイル自体はちゃんとアップロードされているんですが。
Apacheの設定 mod_rewriteと.htaccess
原因がよく分かりませんでしたので、いろいろぐぐって調べてみました。すると、Apacheの拡張モジュールであるmod_rewriteか、設定ファイルである.htaccessに原因があるのではないかと(あくまで予想ですが)。
mod_rewrite
mod_rewriteは、Google検索で空想ブログ(新しいタブで開く)さんの記事に行き着いて気がつきました。
mod_rewrite は Apache のモジュールの一つで、主に使う機能は以下2つ。
・動的URL(?id=) を 静的な URL へ正規表現で書き換える
・アクセスされた URL とは別の URL へリダイレクト
こちらの記事は、Ubuntuを前提としていると思います。自分はCentOSを使用しているので、読み替える必要があります。
その点については、Tottoko Memo(新しいタブで開く)さんの記事で、CentOSに置き換えた場合の説明がされています。ただし、自分の場合、この2つの作業ではhello1.phpは表示されませんでした…。
Apacheの公式ドキュメント(新しいタブで開く)を読むと、”RewriteBase Directive”に「何か」を記述する必要がありそうですが、その「何か」が分かりません。
.htaccess
hello1.phpが表示されないと思われる、もう一つの原因が、.htaccessです。.htaccess自体はFuelPHPのプロジェクト内部にすでに入っています。
プロジェクト名/public/.htaccess
<IfModule mod_rewrite.c> RewriteEngine on # NOTICE: If you get a 404 play with combinations of the following commented out lines #AllowOverride All #RewriteBase /wherever/fuel/is # Make sure directory listing is disabled Options +FollowSymLinks -Indexes # Restrict your site to only one domain # !important USE ONLY ONE OPTION # Option 1: To rewrite "www.domain.com -> domain.com" uncomment the following lines. #RewriteCond %{HTTPS} !=on #RewriteCond %{HTTP_HOST} ^www\.(.+)$ [NC] #RewriteRule ^(.*)$ http://%1/$1 [R=301,L] # Option 2: To rewrite "domain.com -> www.domain.com" uncomment the following lines. #RewriteCond %{HTTPS} !=on #RewriteCond %{HTTP_HOST} !^www\..+$ [NC] #RewriteCond %{HTTP_HOST} (.+)$ [NC] #RewriteRule ^(.*)$ http://www.%1/$1 [R=301,L] # 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] # make HTTP Basic Authentication work on php5-fcgi installs <IfModule mod_fcgid.c> RewriteCond %{HTTP:Authorization} . RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}] </IfModule> # Send request via index.php if not a real file or directory RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d # deal with php5-cgi first <IfModule mod_fcgid.c> RewriteRule ^(.*)$ index.php?/$1 [QSA,L] # RewriteRule ^(.*)$ /testproject/index.php?/$1 [QSA,L] </IfModule> <IfModule !mod_fcgid.c> # for normal Apache installations <IfModule mod_php5.c> RewriteRule ^(.*)$ index.php/$1 [L] # RewriteRule ^(.*)$ /testproject/index.php/$1 [L] </IfModule> # for Apache FGCI installations <IfModule !mod_php5.c> RewriteRule ^(.*)$ index.php?/$1 [QSA,L] # RewriteRule ^(.*)$ /testproject/index.php?/$1 [QSA,L] </IfModule> </IfModule> </IfModule>
これらの記述のうち、ErogameScape -エロゲー批評空間- Blog(新しいタブで開く)さんの記事によると、以下の「プロジェクト名」の部分を加筆すればよいとのこと。
<IfModule mod_fcgid.c> RewriteRule ^(.*)$ /プロジェクト名/index.php?/$1 [QSA,L] </IfModule> <IfModule !mod_fcgid.c> # for normal Apache installations <IfModule mod_php5.c> RewriteRule ^(.*)$ /プロジェクト名/index.php/$1 [L] </IfModule> # for Apache FGCI installations <IfModule !mod_php5.c> RewriteRule ^(.*)$ /プロジェクト名/index.php?/$1 [QSA,L] </IfModule> </IfModule>
ただ、自分の場合、これでもhello1.phpは表示されない。
まとめ
h2の見出しとして、「まとめ」って書いていますが、ぜんぜんまとまってなくて恐縮です。要は、mod_rewriteか.htaccessのどちらかに原因があるんだろうけど、具体的にどうすればいいのかは、分かっていないということです。
〔参考サイト〕