- ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:「Laravel」上で自作コントローラが動かない)
「Laravel」上で自作コントローラが動かない
このQ&Aのポイント
- さくらレンタルサーバーで「Laravel」を試していますが、自作コントローラが動かない問題が発生しています。
- さくらサーバーでのみ発生し、他のサーバーでは正常に動作します。
- routes.phpに直接Hello Worldを表示させると問題は発生しないため、原因は自作コントローラにあると考えています。
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
まず、アクセスしようとしているURLに間違いはありませんか? 「http://○○.sakura.ne.jp/laravel/public/hello/」ですよね? 別サーバでは動くのにさくらでは動かないと言うことは、さくらの方でhtaccessの設定が正しく動作していないということも考えられます。 具体的には、apacheサーバの設定でhtaccessからの設定上書き(allow override)が許可されていない、mod_rewriteが有効になっていない、といったパターンです。 このあたりの詳しいことはさくらのサービスマニュアルなどをご覧になった方が良いかと思います。ユーザ数は多いはずなので検索しても情報は見つかるでしょう。 また、本件とはあまり関係なさそうですが、質問者さんはURLに「public」を含む設定にしていますが、本来Laravelはpublicディレクトリをhttpのルートディレクトリに設定し、その上のapplicationディレクトリなどにはアクセスできないようにすることが想定されています(おそらく)。 サーバの仕様で不可能な気がしますが、もし可能であればサーバの公開ディレクトリ設定を変更した方が良いかと思います。 的外れだったらごめんなさい。
お礼
解決しました! 海外の掲示板を参照し、「.htaccess」の RewriteRule ^(.*)$ index.php/$1 [L] の記述を RewriteRule ^(.*)$ index.php?$1 [L] に変更したら上手くいきました! ありがとうございました。
補足
ご返答、本当にありがとうございます! 契約しているサーバーは「さくら」の「スタンダード」でして、mod_rewriteは使えるようです。また、.htaccessの利用許可(allow override)もされているようです。 ここに至るまでの流れを記載させてもらいます(まだ大したことはしていないのですが・・・)と、 --- 1.「Laravel」を「/home/(アカウント)/www/」直下に配置しました。 2.とりあえず、「http://○○.sakura.ne.jp/laravel2/public/」にアクセスすると「Internal Server Error」が出る。 3.「/home/(アカウント)/www/laravel/public」直下の「.htaccess」を確認。さくらスタンダードではOptionsが使えないので、この記述を削除 <IfModule mod_rewrite.c> # Options +FollowSymLinks RewriteEngine On RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^(.*)$ index.php/$1 [L] </IfModule> 「http://○○.sakura.ne.jp/laravel2/public/」にアクセスすると、Laravelのトップページが表示されるようになった。 4.helloコントローラを作成してアクセス(→http://(アカウント).sakura.ne.jp/laravel/hello/)。さくらインターネットでは「Web ページがみつかりません」のエラー。ロリポップではhelloが問題なく動作します。 --- ご指摘のとおり、現在、urlには「public」を含めております。 というのは、実は、実働している別システムが入っているサーバでして、こちらを間借りして確認作業を行っております。勉強不足から、同じサーバ内で動いているシステムに影響を及ぼさない形で公開ディレクトリを変更する方法をまだ良く分かっておらず、とりあえずの方法で進めている状況です。 仕事上、ロリポップよりさくらのレンタルサーバーを利用することが多いので、是非解明したいと思っております。 長々と申し訳ありません。