Laravelでindex以外のページが表示されない

解決済

回答 2

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 341

morisan

score 11

前提・実現したいこと

ドットインストールを見ながらさくらのvpsにLaravelの環境を構築しようとしています。
indexページは無事に表示されましたが、そこからリンクページに飛ばした時にNot foundになってしまいます。

ドットインストール
「Laravel 5.5入門」#15で詰まりました
https://dotinstall.com/lessons/basic_laravel_v2

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

indexページはドットインストールと同じようにちゃんと表示されます。
http://〇〇〇

そこからリンク先のページに飛ぶとnot foundになります
http://〇〇〇/posts/1

Not Found

The requested URL /posts/1 was not found on this server.

該当のソースコード

/var/www/laravel/routes/web.php

<?php

Route::get('/','PostsController@index');
Route::get('/posts/{id}', 'PostsController@show');

/var/www/laravel/app/Http/Controllers/PostsController.php

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use App\Post;

class PostsController extends Controller
{
    public function index() {
      $posts = Post::latest()->get();
      return view('posts.index')->with('posts', $posts);
    }

    public function show($id) {
      $post = Post::findOrFail($id);
      return view('posts.show')->with('post', $post);
    }
}

/var/www/laravel/resources/views/posts/index.blade.php

<!DOCTYPE html>
<html lang="ja">
  <head>
    <meta charset="utf-8">
    <title>Blog Posts</title>
    <link rel="stylesheet" href="/css/styles.css" />
  </head>
  <body>
    <div class="container">
      <h1>Blog Posts</h1>
      <ul>
        @forelse ($posts as $post)
        <li><a href="{{ action('PostsController@show', $post->id) }}">{{ $post->title }}</a></li>
        @empty
        <li>No posts yet</li>
        @endforelse

      </ul>
    </div>
  </body>
</html>

/var/www/laravel/resources/views/posts/show.blade.php

<!DOCTYPE html>
<html lang="ja">
<head>
  <meta charset="utf-8">
  <title>{{ $post->title }}</title>
  <link rel="stylesheet" href="/css/styles.css">
</head>
<body>
  <div class="container">
    <h1>{{ $post->title }}</h1>
    <p>{!! nl2br(e($post->body)) !!}</p>
  </div>
</body>
</html>

試したこと

Laravel以下のファイルはユーザーapacheにして読み込み書き込みをできるようにしています

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

PHP 7.1.29
Laravel Framework 5.8.16
CentOS Linux release 7.6.1810 (Core)
Server version: Apache/2.4.6 (CentOS)

バーチャルホストでポート8001をlaravelにしています

Listen 8001
<VirtualHost *:8001>
DocumentRoot /var/www/laravel/public
</VirtualHost>

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

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

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

    クリップを取り消します

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

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

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

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

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

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

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

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

    質問の評価を下げる

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

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

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

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

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

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

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

    詳細な説明はこちら

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

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

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

質問への追記・修正、ベストアンサー選択の依頼

  • morisan

    2019/05/20 13:06

    いろいろと確認したところ、解決できたみたいです。
    そもそもの前提で間違えていました。すみません。。
    回答を記入しておきます。何度もありがとうございました。

    キャンセル

  • m.ts10806

    2019/05/20 13:19

    「質問は(もちろん回答も)編集できる」というのは頭に置いておいてください。

    キャンセル

  • morisan

    2019/05/20 13:45

    はい 質問にも追加しておきました

    キャンセル

回答 2

+1

アプリケーションの設定Webサーバの設定がちゃんと設定されているか見直してください。
今回の場合は、特にWebサーバ(Apache)の設定。念のため、Apacheの設定変更後は再起動をお忘れなく。

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2019/05/20 02:21

    1.アプリケーションの設定はindexが表示されてるので大丈夫と思っています
    2.webサーバーの設定に関して

    ①httpd.confに以下を追加して
    LoadModule rewrite_module modules/mod_rewrite.so

    ②/var/www/laravel/public/.htaccessを以下に書き換えました
    <IfModule mod_rewrite.c>
    <IfModule mod_negotiation.c>
    Options +FollowSymLinks -Indexes
    </IfModule>

    RewriteEngine On

    RewriteCond %{HTTP:Authorization} .
    RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]

    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^ index.php [L]
    </IfModule>

    その後Apache再起動しましたが、ダメでした

    キャンセル

  • 2019/05/20 03:18

    DirectoryセクションのAllowOverrideが有効になっているか確認してみてください。
    無効だと.htaccessが無視されます。
    <Directory ....>
    ....
    AllowOverride All  ←これがNoneになってない?
    ....
    </Directory>

    あと、以降「ダメでした」だけでなく、どうダメだったのかApacheのエラーを添えてコメントいただけると助かります。
    同じ環境はこちらにないので、1つ1つ具体的に状況を説明いただかないと的確な回答が出来かねます。

    キャンセル

  • 2019/05/20 11:03

    なんどもありがとうございます。
    /etc/httpd/conf/httpd.conf
    の<Directory>の部分を以下に書き換えました。
    <Directory />
    # AllowOverride none
    AllowOverride All
    Require all denied
    </Directory>

    その後、
    systemctl restart sshd.service
    をしましたが、Not foundです。

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

    キャンセル

check解決した方法

0

アドバイスいただき、DocumentRootのあたりを見直していたところ、
/etc/httpd/conf/httpd.conf
の記述間違いを発見できました。

バーチャルホストでポート8001をlaravelのフォルダにしていたのですが、

<誤>
Listen 8001
<VirtualHost *:8001>
DocumentRoot /var/www/laravel/public
</VirtualHost>

<正>
Listen 8001
<VirtualHost *:8001>
DocumentRoot /var/www/laravel/public
<Directory /var/www/laravel>
AllowOverride All
</Directory>
</VirtualHost>

上記のように修正したところ直りました。
バーチャルホストにもAllowOverride Allを書かないといけませんでした。。
そもそもの前提段階で間違えており、回答してくださった皆様にはご迷惑をおかけしました。

頂いたアドバイスは知らないことばかりで勉強になりました。ありがとうございました。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

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

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

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