NetBeansでFuelPHPのプロジェクトを立ち上げたので、さっそくcontrollerに、hello1.phpに設置してみました。’Hello World!’が表示される、ごく簡単なプログラムです。
[php]
<?php
class Controller_Hello1 extends Controller {
public function action_index() {
return ‘Hello World!’;
}
}
[/php]
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
[php]<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>
[/php]
これらの記述のうち、ErogameScape -エロゲー批評空間- Blogさんの記事によると、以下の「プロジェクト名」の部分を加筆すればよいとのこと。
[php]<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>[/php]
ただ、自分の場合、これでもhello1.phpは表示されない。
まとめ
h2の見出しとして、「まとめ」って書いていますが、ぜんぜんまとまってなくて恐縮です。要は、mod_rewriteか.htaccessのどちらかに原因があるんだろうけど、具体的にどうすればいいのかは、分かっていないということです。
〔参考サイト〕