【掲示板アプリを作ろう】【解決】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したら今度は問題なくルーティング成功していた。

この記事が気に入ったらサポートをしてみませんか?