🙆‍♀️

Laravel(php-apache)でルーティングが404になった

2021/10/07に公開約1,600字

環境

Dockerイメージ : php:8.0-apache
Composer : バージョン2.1.8
Laravel : バージョン8.58.0

問題発生

docker-compose up -dでDockerコンテナを立ち上げ,localhostにアクセスし,デフォルト画面が表示されることを確認しました.

そしてページを追加しようと思い,以下を追記してlocalhost/hogeにアクセスすると404エラーが発生.

web.php
Route::get('/hoge', function () {
    return view('welcome');
});

Virtualhostの設定を修正するも直らず

同じような事象に遭遇している記事がありましたので,こちら を参考に/etc/apache2/sites-available/000-default.confを修正.

/etc/apache2/sites-available/000-default.conf
<VirtualHost *:80>
(省略)
	DocumentRoot /var/www/html/public
	<Directory /var/www/html/public/>
		Options Indexes FollowSymLinks
		AllowOverride All
		Require all granted
	</Directory>
(省略)
</VirtualHost>

そしてapacheの再起動をかけてみるも404のまま変わらずでした...

原因はmod_rewriteが有効化されていなかった

php artisan route:listでルーティング自体はされていたので,問題はApache周りと思って調べてみました.すると,どうやらmod_rewriteを有効化しないといけないようでした.

Dockerfileに以下のコマンドを書いて無事localhost/hogeにアクセスすることができました.

Dockerfile
RUN  a2enmod rewrite

Apache周りについて調べてみた

初歩的なところで躓いき,理解が浅かったと感じたのでApache周りについて,よくわからないなりに整理してみました.

httpd.conf

ubuntuの場合,apache2.confというファイル名のようですが,こちらがApacheのメイン設定ファイルとなります.Apache全般に関する設定を行います.ファイルを修正した場合,Apacheを再起動しないと反映されません.

.htaccess

ディレクトリごとに設定したいときに使います.Laravelだとpublic/.htaccessにあります.開発時にあまりいじくったことはないですが

mod_rewrite

公式ドキュメントなどネットでググってみた感じ,URLの書き換え・リダイレクトを行ってくれるみたいです.Laravelのpublic/.htaccessの中を見てみると,mod_rewriteを使っていたので,これが動かせていなかったのかと思われます.

Discussion

ログインするとコメントできます