【掲示板アプリを作ろう】【解決】route作成したが目当てのページに遷移できない
これの続き。
前回の調査で、Laravelを使う際はWebサーバー側に何かしらの設定が必要そうである事まで掴めた。
※1度Dockerを使わずLaravelの内部サーバーで立ち上げてみて確証を得ようと思ったが、DB周りの設定をし直さなければいけないのが面倒で止めた。
結論
mod_riwriteの有効化と、AllowOverride Allの設定が必要。
どっちもApacheの問題だった。
参考
<Directory>タグ
こちらを参考にした所、Apacheの設定ファイルに追記が必要な様子。
<Directory /var/www/html/public>
AllowOverride All
Options Indexes FollowSymLinks
Require all granted
</Directory>
上記の記述の書き方をdocker用に作成した000-default.confのどこに入れ込むべきか分からなかったのだが、他の方がGithubに挙げている000-default.confを参考に以下のように入れ込む。
<VirtualHost *:80>
ServerAdmin webmaster@localhost
DocumentRoot /var/www/html/public
<Directory /var/www/html/public>
AllowOverride All
Options Indexes FollowSymLinks
Require all granted
</Directory>
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>
しかしこれだけでは改善は見られず。
mod_riwrite
更に上記のteratailを読み込んでいくと、以下のような記述。
>「apache2.conf」とsites-enabledの設定ファイル、また、laravelのpublic配下にある.htaccessファイルの設定を全て確認しましたが、特におかしいと思われる記述が見当たりませんでした。
>次に、mod_riwriteが有効になっているかどうか、次のコマンドを叩いたところ、
>「ls /etc/apache2/mods-enabled/」
>見事に、rewrite.loadが見当たりませんでしたので、「sudo a2enmod rewrite」でmod_rewriteを有効化しました。その後、無事にアクセスできることを確認しました。
apache2.conf他、ローカルの環境には見当たらず。docker内か。
慣れないCLIでちまちまコマンドを打ちつつ、mod_rewriteの有効化に成功。dockerでroot権限を持っているのでsudoは必要ない。
上記を実施後、ルーティングが正常に機能し始めた。
mod_rewriteとはなにか
Apacheの便利機能のよう。
Laravelがこちらの設定を前提としている作りなのか、構成次第なのかは現時点では不明。
その他参考
mod_rewriteというキーワードを加えると即HITした記事。今回見つけたこととほぼ同じ内容に加えて、他の内容も載っている。
Docker側の責務では?
Apacheのmod_riwrite設定の有効化とか、これ完全にdocker側で制御する範疇だ...
dockerfileに書くのね。分かる。
FROM php:7.2-apache
RUN a2enmod rewrite
これで大丈夫、と思いdocker-compose downの後docke-compose up -dを実行。
しかし、動かない?
Dockerfileに変更を加えたので、docker-compose buildが必要だったというオチ。
build後再度docker-compose up -dしたら今度は問題なくルーティング成功していた。
この記事が気に入ったらサポートをしてみませんか?