FuelPHP1.7.2のcontrollerに配置したPHPファイルが表示されない。Apacheのmod_rewriteと.htaccessを調べてみた

web_dev

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から見た場合のファイルの配置場所

fuelphp_apache1

プロジェクト名/fuel/app/classes/controller/hello1.php

ブラウザでは”Not Found”

hello1の内容を表示させるためには、ブラウザに次のURLを打ち込むことになります

ドメイン名(IPアドレス)/プロジェクト名/hello1/index

fuelphp_apache2

すると”Not Found“が…。PHPファイルの表示がされません。

fuelphp_apache3

コマンドラインから確認すると、ファイル自体はちゃんとアップロードされているんですが。

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のどちらかに原因があるんだろうけど、具体的にどうすればいいのかは、分かっていないということです。

〔参考サイト〕

web_dev

この記事が気に入ったら
フォローしてね!

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!
目次