キャンペーン


2014年5月7日水曜日

xampp + cakephp で「Object not found!」 にハマる


自分はWeb開発者ではないが、数年前に使ったPHPフレームワーク、cakePHPを再度使ってみようという衝動に駆られた。

Windows上、XAMPPで、Helloアプリくらい表示してやろうかと…

cakephpのソースはgitでcloneしてきて c:/cakephp に展開。

apacheの設定は virtual host 機能を使って http://localhost/cakephp/ で実行させて表示する思惑。

早速http.confとhttpd-vhosts.confを以下のように書き換えて実施した。

(httpd.conf)

コメントをはずす
:
LoadModule rewrite_module modules/mod_rewrite.so
:
LoadModule vhost_alias_module modules/mod_vhost_alias.so


(httpd-vhosts.conf)

/cakephpディレクトリの設定を追加(htdocsフォルダ以外のディレクトリにマップ)

<VirtualHost *:81>
    ServerAdmin postmaster@dummy-host.localhost
    ServerName ibmnote
    RewriteEngine on
    Alias /cakephp "C:\cakephp"
    ErrorLog "logs/vhost-error.log"
</VirtualHost>

<Directory "C:\cakephp">
    <IfModule php5_module>
     <Files "status.php">
      php_admin_flag safe_mode off
     </Files>
    </IfModule>
  Options +FollowSymLinks
 Require all granted
</Directory>


すると「Object not found!」 エラー勃発!
CakePHPの利用者がどれほど居るかしらないが、かなりこれに遭遇されてる方が多い模様。



確かに、初回のcakephpインストール時にもcssが効かなかったり、アイコン画像が表示しなかったりして変だぞ?と感じたのだが、


cssフォルダを cakephp/app/webroot/css から cakephp へコピーしてくれば回避できるなどデマがはびこっているのだがこれは間違いだと改めたい

本来なら上図は下記のように表示されるべきものである。




あきらかにapacheのmod_rewriteエンジンの設定ミスである

※もちろんvpath、app, webroot の各 .htaccessのRewriteBaseに下記のように設定されている必要もある(追記 add 2014/5/8)

    RewriteBase /vpath/
    RewriteBase /vpath/app/
    RewriteBase /vpath/app/webroot/



結論から先に説明してしまったが、それに至るまでには道のりは長かった。

実際 xampp のデフォルトWEBコンテンツフォルダ「htdocs」へ配置すればなんら開発時は問題はないのだが、仮想ディレクトリに配置した時(本番リリース時)に問題になる。


実際Apacheのエラーログには根拠となるものが吐かれれず苦労した。しかし下記ページにたまたまで出会うことができ、幸福を手に入れることができた。
http://codeblow.com/questions/htaccess-object-not-found-problem-cakephp-on-xamp-and-mac-os-x/

実は、httpd-vhosts.confファイルの仮想ディレクトリの設定では、特定の仮想ディレクトリにrewriteを適用するにはルート「/」の設定も必要であった。

(httpd-vhosts.conf)


<Directory />
    Options Indexes FollowSymLinks ExecCGI Includes
    AllowOverride All
    #XAMPP
    Order allow,deny
    Allow from all
</Directory>


と一件落着で、hello world! が表示されたw



一見表面ズラは正常に見えてもコントローラやビューを使ったりすると「Object Not Found!」が出たりするので、CakePHPを始める時はこのRewite辺りのチェックに注意したい。

今回のテーマはCakePHPのみならず一般的な知識として有用だと思います。

物事は根本から解決すべきだと思う今日このごろです。



0 件のコメント:

コメントを投稿