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

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

ただいまの
回答率

87.58%

laravelで404エラーになる

解決済

回答 2

投稿

  • 評価
  • クリップ 0
  • VIEW 8,650

score 5

前提・実現したいこと

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.

該当のソースコード

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

試したこと

php artisan route:listコマンド

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

-

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 2

checkベストアンサー

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/03 12:35

    hi cat!

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

    これに関しては必須ではありません。
    サブディレクトリでも十分動きます。

    index以外が見れないのはmod_rewriteの欠如、またはhtaccessが存在しないのが原因です。

    キャンセル

  • 2020/02/03 12:51

    そうですね。必須ではなかったです。

    個人的には最初はマニュアルに沿って進めるのが良いかと思いますが、ご判断ください。

    キャンセル

  • 2020/02/03 18:36

    アドバイスありがとうございます。
    コメントが遅くなりまして申し訳ございません。

    >公式マニュアルの「きれいなURL」の項目をご確認ください。

    ここをじっくり読んでみたらWEBサーバーの項に「確実にmod_rewriteモジュールを有効に設定し」とあり、「mod_rewriteを有効にするってどうやるんだろう?」と調べたところ、httpd.confのLoadModuleの部分に記述があることが分かり、確認したところ、

    #rewrite_module modules/mod_rewrite.so

    とコメントアウトされておりました。

    コメントアウトを外しApacheを再起動したところ、無事404エラーにならずに表示されるようになりました。

    この度は本当にありがとうございました。

    キャンセル

-2

回答: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 10:46

    >Apacheのインストールから始めてる時点で間違い。そんな使い方は誰もしてない。

    Apacheのインストールから始めていないです。
    Apacheは元々インストールしてあります。

    >初心者が一番勘違いしてる部分だけどLaravelだけ勉強しても使えるようにはならない。

    laravelの勉強だけしているわけではありません。

    >このくらい知ってるだろうという前提でドキュメントには「Laravelではこう使う」ということしか書いてない。
    事前に知ってないとちゃんと書いてあっても理解できない。

    であれば、「一番最初の最初に見るべきページにWebサーバーの設定のことが書いてある。」と言われているページを見ても理解できないのでは?

    >毎度毎度同じ話だけど

    毎度あなたの回答など見ていません。

    つまり、あなたのように「相手はこんなレベルの人間」と決めつけ、それなのにそのレベルの人間に分かりやすい回答も出来ないような高飛車な人間は職場でも仲間にも「嫌味なヤツ」だと思われているでしょうね。

    ここに質問するのは分からないことがあってそれを解決したいからです。
    解決方法を指南もせずに馬鹿にし卑下するような回答は一切不要です。

    そもそも公式ドキュメントを見てもよく分からない初心者のために(個人ではなく企業が公開している)指南サイトが複数存在しているのでは?

    そんなことも分からずにただ「公式ドキュメントを見ろ」、「理解できないなら理解できる知識を身につけろ」などしか言えないような人間はここに回答する資格は無いのではないでしょうか?

    正に人を不愉快にさせる天才ですね。
    拍手です!

    キャンセル

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

  • ただいまの回答率 87.58%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る