0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

PHP備忘録:localhost:8080/hello が表示されない問題 ― Laravel × Docker の詰まりポイントを整理してみた

Posted at

はじめに

Docker 上で Laravel + Apache 環境を構築して、ルーティング確認まで行った際の備忘録です。

個人の備忘録程度の走り書きとなっておりますが、温かい目で見守っていただければ幸いです。

初学者として PHP のキャッチアップをしている中で、詰まりやすいポイントを整理しておきます。

書こうと思ったきっかけ

個人的に PHP のキャッチアップをしたくて Laravel を触っていたところ、http://localhost:8080/hello が何度やっても表示されずハマりました。そこで一つずつ検証しながら解決できたので、今後の自分や誰かの参考になればと思いまとめています。

内容

表示されなかった主な原因(※あくまで自分の環境調べ)

  • Apache のドキュメントルートが Laravel の public/ ではなかった
  • Laravel アプリは public/ をドキュメントルートにしないと、index.php に到達できず Apache が "Not Found" を返す
  • 初期状態:/var/www/html がドキュメントルートのまま → /public/index.php にアクセスできなかった

解決策

Dockerfile に以下を追加して、Apache のルートを public/ に変更しました:

RUN sed -i 's!/var/www/html!/var/www/html/public!g' /etc/apache2/sites-available/000-default.conf
WORKDIR /var/www/html/public

その他重要な設定

設定項目 意味
.htaccess 配置 ルーティングを Apache に正しく伝える
AllowOverride All .htaccess を Apache に有効化させる
mod_rewrite Laravel の内部ルーティングを機能させる

変更した主なファイル

Dockerfile

# PHP 8.2 + Apache の公式イメージをベースにする
FROM php:8.2-apache

# Laravelで必要なパッケージをインストール(zip, git, curl など)
RUN apt-get update && apt-get install -y \
    zip unzip git curl libzip-dev libonig-dev \
    && docker-php-ext-install pdo_mysql zip

# Composer(PHPのパッケージ管理ツール)をインストール
COPY --from=composer:2 /usr/bin/composer /usr/bin/composer

# LaravelのpublicフォルダをApacheのドキュメントルートに設定
RUN sed -i 's!/var/www/html!/var/www/html/public!g' /etc/apache2/sites-available/000-default.conf

# .htaccess を使うために mod_rewrite を有効化
RUN a2enmod rewrite

# 作業ディレクトリを Laravel の public に設定
WORKDIR /var/www/html/public

# Laravelアプリのソースコードをコピー
COPY src/ /var/www/html/

src/routes/web.php

<?php

use Illuminate\Support\Facades\Route;
use App\Http\Controllers\HelloController;

Route::get('/', function () {
    return view('welcome');
});

Route::get('/hello', [HelloController::class, 'index']);

src/app/Http/Controllers/HelloController.php

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;

class HelloController extends Controller
{
    public function index()
    {
        return 'こんにちは!これは Hello ページです。';
    }
}

実際の画面

Screenshot 2025-05-03 at 18.35.04.png

まとめ

Laravel アプリを Docker 上の Apache で動かす際は、私の環境で修正した部分は以下になります。

  • Apache のドキュメントルートを public/ にすること
  • .htaccess を有効にするには AllowOverride All
  • mod_rewrite を有効にして Laravel にルーティングを渡す

この3つが揃って初めて、http://localhost:8080/hello が正しく表示されました。

同じようにハマっている方の参考になれば幸いです...!

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?