conocode
このコード
トラブルシューティング

Laravel で Not found が出る

Laravel をセットアップしたのにアクセスすると Not found が出るんですけど
ルーティングの設定はちゃんとした?
ルーティング設定したんですけど Not found なんです。。。

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 ディレクティブを確認します。

上記のようにAllowOverrideの値が None になっていると .htaccess が効かずにルーティングができなくて Not found になってしまいます。

AllowOverride を上記のように All に書き換えてファイルを保存します。

こうすることによって各ディレクトリにある .htaccess の上書きが効くようになります。

設定ファイルを書き換えたらApacheを再起動するのを忘れないようにしましょう。

Apache 再起動後にアクセスすると、Not found は消えて無事にページが表示されるようになりました。