CentOSにWEBサーバーをインストールしただけの状態だとトップページ以外の表示が正常に出来ませんでした。
症状としては下記に記載されているトラブルシューティングと同じなので
http://codeigniter.jp/user_guide_ja/installation/troubleshooting.html
こちらの対策を行えばよいと考えておりますが、CodeIgniter側での対策ではなく、サーバー側でPATH_INFO環境変数が使用出来るようにして対策したいと思います。
httpd.confかphp.iniの設定を変更すればよいと考えているのですが、それらしい記述を見つけられませんでした。
どの部分の設定を変更すれば良いのでしょうか?
使用環境はCentOS 5.6 / PHP 5.1.6 となります。
識者の方のアドバイスいただけると助かります。
コメント(5件)
こちらはCetOS 5.4、PHP 5.1.6で確認しましたが、デフォルトでPATH_INFOが取得できる状態でした。
適当に、次のような内容のファイルを作成して、実行して確認してみてください。
<?php
if(isset($_SERVER['PATH_INFO'])) {
echo $_SERVER['PATH_INFO'];
} else {
echo "PATH_INFOがセットされていません。";
}
?>
「ファイル名.php/hatena/qa」という形式でアクセスした時に「/hatena/qa」のように表示されれば、PATH_INFOは有効になっています。
http://php.net/manual/ja/reserved.variables.server.php
トップページ以外の表示が正常に出来ないというのは、どのように表示できないのでしょうか?
コントローラをどのように作成しましたか?
http://codeigniter.jp/user_guide_ja/general/controllers.html
回等いただきありがとうございます。
CentOSは仮想環境に入れたものを使用しております。
入れる際はWebとMySQLを入れた状態で、confなどの設定はデフォルトになっています。
その状態で、$_SERVER['PATH_INFO']を取得しようとしたら「PATH_INFOがセットされていません」と表示されました。
confいじって見えないのなら分かったのですが、特に何も触っていない状態でPATH_INFOが有効となっていないようです。
原因が分からない・・・
無効になっていると404エラーになるはずなのですが・・・
とりあえず、httpd.conf等のサーバ設定ファイル(<VirtualHost>、<Directory>内も可)または.htaccessに以下を記述してどうなるか試してみてください。
AcceptPathInfo On
http://httpd.apache.org/docs/2.0/ja/mod/core.html#acceptpathinfo
まずPATH_INFOについてですが、ルートディレクトリにindex.phpを置き、中身は回答していただいたものを記述して確認しました。
その結果、PATH_INFOがセットされていませんとの表示となりました。
Virtualホストは切っておらずそのまま使っております。
Directoryは以下のようにしております。
<Directory />
Options FollowSymLinks
AllowOverride All
</Directory>
AcceptPathInfoについても付加して
<Directory />
Options FollowSymLinks
AllowOverride All
AcceptPathInfo on
</Directory>
.htaccess
AcceptPathInfo on
としてみたのですが、それでもダメでした。
レンタルサーバーなどに持っていくとPATH_NFOは取れているようなので、とりあえずそちらで動かしてみようかとも考えています。
[root@localhost ~]# lsb_release -a
LSB Version: :core-4.0-ia32:core-4.0-noarch:graphics-4.0-ia32:graphics-4.0-noarch:printing-4.0-ia32:printing-4.0-noarch
Distributor ID: CentOS
Description: CentOS release 5.6 (Final)
Release: 5.6
Codename: Final
conf等の設定がそのままという事は、ドキュメントルートも「/var/www/html」のままですか?
index.phpの内容を書き替えて、「phpinfo()」を実行するとどうなりますか?
「http://localhost/index.php」でアクセスした場合は、「PHP Variables」の所に「_SERVER["PATH_INFO"]」が表示されず、「http://localhost/index.php/info」等でアクセスした場合に、「_SERVER["PATH_INFO"]」の項目が増えているはずなのですが・・・
CodeIgniterで作成したコントローラも問題なく動作しました。
もし以下のようなエラーが表示されて「404 Page Not Found」になる場合は、作成したファイルのアクセス権を見直してみてください。
(※その他に「読み込みのみ」を設定します。)
***********************************************
A PHP Error was encountered
Severity: Warning
Message: include(application/controllers/*****.php) [function.include]: failed to open stream: No such file or directory
Filename: core/CodeIgniter.php
Line Number: 234
***********************************************