2022/06/30
Ubuntu に Laravel をインストールするとルート以外のページが Not found となる現象が発生しました。
今回はこの原因と解決策についてエントリーしたいと思います。
storage と cache の書き込み権限を付与すると解決するケースが多いです。
[root@example ~]# chmod -R 777 /var/www/html/storage/
[root@example ~]# chmod -R 777 /var/www/html/bootstrap/cache/
原因
原因は2つあります。
1)Apacheの設定ファイル(AllowOverride All)
2)mod_rewrite を有効にする
解決策
1)Apacheの設定ファイル(AllowOverride All)
Ubuntu + Apache2 の構成はちょっと独特です。
設定ファイルの場所は以下になります。
Ubuntu のリポジトリから取得出来る Apache2 はオリジナルの Apache2 とはディレクトリの構成や設定の方法が違います。
それを以下のように変更。
<Directory "/data/laravel">
# AllowOverride None
AllowOverride All
Require all granted
</Directory>
上記のように AllowOverride の値が None になっていると .htaccess が効かずにルーティングができなくて Not Found になってしまいます。
AllowOverride を All に書き換えてやると、各ディレクトリにある .htaccess の上書きが効くようになります。
設定ファイルを書き換えたら Apache を再起動するのを忘れないようにしましょう。
$ sudo service apache2 restart
2)mod_rewrite を有効にする
.htaccessファイルを有効化する上で mod_rewrite.so モジュールが必要です。
1.まずはmod_rewriteが利用可能となっているかを確認
$ cat /etc/apache2/mods-available/rewrite.load
上記のコマンドを打って以下が表示されればOK
LoadModule rewrite_module /usr/lib/apache2/modules/mod_rewrite.so
使えることが確認できたら a2enmod というコマンドを実行します。
$ sudo a2enmod rewite
a2enmodを実行すると以下の様なメッセージが出てきます。
Enabling module rewrite.
To activate the new configuration, you need to run:
service apache2 restart
忘れずに restart しましょう。
$ sudo service apache2 restart
以上です。
仕事で Laravel を使っています。気づいたことや新しい発見など情報を発信していきます。問い合わせはこちら。