Laravel をセットアップして、基本的なAuth を設定し
https://example.com/login/
のようにアクセスしても、Not found になってしまう現象が発生しました。
Cache をクリアしたり、routes/web.php をチェックしたりしましたが一向に解決できません。
Not found になってしまう原因
Laravel のルーティングはルートディレクトリにある .htaccess ファイルを使って行われているようです。
.htaccess ファイルとは、Apache などの Webサーバがディレクトリ毎に設定を変えるために使用するファイルです。
.htaccess ファイルがあると、そのディレクトリへのアクセス設定はデフォルトの設定から上書きされます。この設定を利用して Laravel はアクセスを各コントローラに振り分けているのです。
で、今回の現象の原因ですが、.htaccess ファイルは確かにあったのですが、Apache の設定でそのファイルを無視する設定になっていたのが原因でした。
現象への対処方法
Apache の設定ファイル(通常なら /etc/httpd/conf にある httpd.conf)を開きドキュメントルートの Directory ディレクティブを確認します。
1 2 3 4 5 |
<Directory "/data/laravel"> AllowOverride None # Allow open access: Require all granted </Directory> |
上記のようにAllowOverrideの値が None になっていると .htaccess が効かずにルーティングができなくて Not found になってしまいます。
1 2 3 4 5 |
<Directory "/data/laravel"> AllowOverride All # Allow open access: Require all granted </Directory> |
AllowOverride を上記のように All に書き換えてファイルを保存します。
こうすることによって各ディレクトリにある .htaccess の上書きが効くようになります。
設定ファイルを書き換えたらApacheを再起動するのを忘れないようにしましょう。
Apache 再起動後にアクセスすると、Not found は消えて無事にページが表示されるようになりました。