質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Laravel

LaravelとはTaylor Otwellによって開発された、オープンソースなPHPフレームワークです。Laravelはシンプルで表現的なシンタックスを持ち合わせており、ウェブアプリケーション開発の手助けをしてくれます。

Q&A

解決済

2回答

6769閲覧

laravelで404エラーになる

Takekoro

総合スコア5

Laravel

LaravelとはTaylor Otwellによって開発された、オープンソースなPHPフレームワークです。Laravelはシンプルで表現的なシンタックスを持ち合わせており、ウェブアプリケーション開発の手助けをしてくれます。

0グッド

0クリップ

投稿2020/02/01 14:35

前提・実現したいこと

Windows10環境に、composerでlaravelをインストールしました。
Apacheのドキュメントルート(C:\Apache24\htdocs)にプロジェクト(hogehoge)を作成し、ブラウザで以下のアドレスにアクセスするとlaravelの画面が表示されます。
http://localhost/hogehoge/public/

しかし、hogehoge\routes\web.phpに新たなルーティング(hello)を追加し、ブラウザでアクセスすると404エラーになってしまいます。
http://localhost/hogehoge/public/hello

試しに以下のアドレスでアクセスすると404エラーにならずにきちんと表示されます。
http://127.0.0.1:8000/hello

なぜ、「http://127.0.0.1:8000/hello」だときちんと表示されて、「http://localhost/hogehoge/public/hello」だと404エラーになるのかが知りたいです。

ちなみに、自分でも色々と調べてみて、「php artisan route:list」では以下のように表示されることからルーティング自体は正しく出来ている模様です。
(「http://127.0.0.1:8000/hello」できちんと表示されるので当たり前と言えば当たり前かもしれませんが…)
+--------+----------+----------+------+---------+--------------+
| Domain | Method | URI | Name | Action | Middleware |
+--------+----------+----------+------+---------+--------------+
| | GET|HEAD | / | | Closure | web |
| | GET|HEAD | api/user | | Closure | api,auth:api |
| | GET|HEAD | hello | | Closure | web |
+--------+----------+----------+------+---------+--------------+

あと、Apacheの設定ファイル(httpd.conf)の記述が間違っているという情報も複数見つけましたが、そもそもlaravelをインストールした際にApacheの設定ファイルを修正する必要があるのか無いのかが分からないレベルです。
Apacheの設定ファイルの<Directory "/var/www/html">のAllowOverrideをAllにする必要があると複数のサイトに書いてありましたが、私の環境の設定ファイルには<Directory "/var/www/html">という部分自体ありません。
試しにAllowOverride noneの部分をすべてAllowOverride Allに変更してApacheを再起動してみましたが404エラーは解消されませんでした。

発生している問題・エラーメッセージ

なぜ、「http://127.0.0.1:8000/hello」だときちんと表示されて、「http://localhost/hogehoge/public/hello」だと404エラーになるのか?

エラーメッセージは以下の通りです。

Not Found The requested URL was not found on this server.

該当のソースコード

php

1Route::get("/hello", function () { 2 print("<h1>Hello World!</h1>"); 3 return null; 4});

試したこと

php artisan route:listコマンド

補足情報(FW/ツールのバージョンなど)

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

Laravelの場合はpublicフォルダーをDocumentRootにしておく必要があります。

Laravelの下記ドキュメントの「設定」の項目をご確認ください。
https://readouble.com/laravel/6.x/ja/installation.html

Apacheの設定については以下のページを見るとわかるかと思います。
https://httpd.apache.org/docs/2.2/ja/mod/core.html#documentroot

http://localhost/hogehoge/public/hello」とアクセスした場合はDocumentRootがC:\Apache24\htdocsのままになっていて、ルーティングが解釈できず404になっていると思われます。

http://127.0.0.1:8000」でアクセスした場合はその設定がされているのでしょう。
php artisan serveで動かしている感じでしょうか。

投稿2020/02/01 18:18

mrkmyki

総合スコア325

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Takekoro

2020/02/02 00:05

回答ありがとうございます。 まず、私の参考にしたlaravelのインストールからhelloworldまでを表示するサイトにhttpd.confをいじる必要があるということが一切書いてなかったので何もしていませんでした。 ただ、http://localhost/hogehoge/public/にアクセスしてlaravelの画面が表示されたらインストールは正常と書かれており、その通りにlaravelの画面が表示されたのでインストールについて他にすることは何も無いと解釈していました。 ちなみに、現在のドキュメントルートは「C:\Apache24\htdocs」で今回のlaravelプロジェクトhogehogeは「C:\Apache24\htdocs\hogehoge」です。 なので、「http://localhost/hogehoge/public/」ではきちんとlaravelの画面が表示されたと思っていました。 >Laravelの場合はpublicフォルダーをDocumentRootにしておく必要があります。 ドキュメントルートを「C:¥Apache24\htdocs\hogehoge\public」に変更してApacheを再起動したところ、(当然ですが)http://localhost/hogehoge/public/にアクセスしてもlaravelの画面は表示されなくなり404エラーになるようになりました。 また、当然http://localhost/hogehoge/public/helloでも404エラーのままです。 ドキュメントルートがlaravelのpublicに変更になったので、http://localhostにアクセスすればlaravelの画面が表示されます。 ただ、http://localhost/helloでは今まで通り404エラーになります。
mrkmyki

2020/02/02 03:39

参考サイトは何か前提が違ったか、そもそも間違っているかもしれないのでいったん無視してください。 .htaccessが有効になっていないのかもしれません。 公式マニュアルの「きれいなURL」の項目をご確認ください。 https://readouble.com/laravel/6.x/ja/installation.html おそらく今は http://localhost/index.php/hello としたら表示される状態ではないでしょうか。
mikkame

2020/02/03 03:35

hi cat! > Laravelの場合はpublicフォルダーをDocumentRootにしておく必要があります これに関しては必須ではありません。 サブディレクトリでも十分動きます。 index以外が見れないのはmod_rewriteの欠如、またはhtaccessが存在しないのが原因です。
mrkmyki

2020/02/03 03:51

そうですね。必須ではなかったです。 個人的には最初はマニュアルに沿って進めるのが良いかと思いますが、ご判断ください。
Takekoro

2020/02/03 09:36

アドバイスありがとうございます。 コメントが遅くなりまして申し訳ございません。 >公式マニュアルの「きれいなURL」の項目をご確認ください。 ここをじっくり読んでみたらWEBサーバーの項に「確実にmod_rewriteモジュールを有効に設定し」とあり、「mod_rewriteを有効にするってどうやるんだろう?」と調べたところ、httpd.confのLoadModuleの部分に記述があることが分かり、確認したところ、 #rewrite_module modules/mod_rewrite.so とコメントアウトされておりました。 コメントアウトを外しApacheを再起動したところ、無事404エラーにならずに表示されるようになりました。 この度は本当にありがとうございました。
guest

0

回答:Pretty URLの設定する。だけど自分で設定しないのが正解。

毎度毎度同じ話だけど
・Laravelの情報は公式ドキュメント(とその非公式日本語訳)以外見てはいけない。
Apacheのインストールから始めてる時点で間違い。そんな使い方は誰もしてない。

ドキュメント見ようとしたら最初にインストールのページが表示される。そのくらい一番最初の最初に見るべきページにWebサーバーの設定のことが書いてある。
https://laravel.com/docs
https://readouble.com/laravel/6.x/ja/installation.html

・Laravel以前の問題
初心者が一番勘違いしてる部分だけどLaravelだけ勉強しても使えるようにはならない。
Laravel使い始める前に知ってて当然の知識が膨大にある。
このくらい知ってるだろうという前提でドキュメントには「Laravelではこう使う」ということしか書いてない。
事前に知ってないとちゃんと書いてあっても理解できない。

今回のPretty URLにしてもWordPressでも散々やってきたこと。
https://ja.wordpress.org/support/article/using-permalinks/

投稿2020/02/02 01:25

kawax

総合スコア10377

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Takekoro

2020/02/02 01:46

>Apacheのインストールから始めてる時点で間違い。そんな使い方は誰もしてない。 Apacheのインストールから始めていないです。 Apacheは元々インストールしてあります。 >初心者が一番勘違いしてる部分だけどLaravelだけ勉強しても使えるようにはならない。 laravelの勉強だけしているわけではありません。 >このくらい知ってるだろうという前提でドキュメントには「Laravelではこう使う」ということしか書いてない。 事前に知ってないとちゃんと書いてあっても理解できない。 であれば、「一番最初の最初に見るべきページにWebサーバーの設定のことが書いてある。」と言われているページを見ても理解できないのでは? >毎度毎度同じ話だけど 毎度あなたの回答など見ていません。 つまり、あなたのように「相手はこんなレベルの人間」と決めつけ、それなのにそのレベルの人間に分かりやすい回答も出来ないような高飛車な人間は職場でも仲間にも「嫌味なヤツ」だと思われているでしょうね。 ここに質問するのは分からないことがあってそれを解決したいからです。 解決方法を指南もせずに馬鹿にし卑下するような回答は一切不要です。 そもそも公式ドキュメントを見てもよく分からない初心者のために(個人ではなく企業が公開している)指南サイトが複数存在しているのでは? そんなことも分からずにただ「公式ドキュメントを見ろ」、「理解できないなら理解できる知識を身につけろ」などしか言えないような人間はここに回答する資格は無いのではないでしょうか? 正に人を不愉快にさせる天才ですね。 拍手です!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問