Laravel(php-apache)でルーティングが404になった
環境
Dockerイメージ : php:8.0-apache
Composer : バージョン2.1.8
Laravel : バージョン8.58.0
問題発生
docker-compose up -d
でDockerコンテナを立ち上げ,localhost
にアクセスし,デフォルト画面が表示されることを確認しました.
そしてページを追加しようと思い,以下を追記してlocalhost/hoge
にアクセスすると404エラーが発生.
Route::get('/hoge', function () {
return view('welcome');
});
Virtualhostの設定を修正するも直らず
同じような事象に遭遇している記事がありましたので,こちら を参考に/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
にアクセスすることができました.
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