Laravelでルーティングをいくら見直しても正しいのに、ルートディレクトリ以外は「404 not found」が表示される…。
Laravelに問題があると思っていたけど、原因はサーバで使用しているNginxの設定にありました。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | server { listen 80; server_name localhost; location / { root /usr/share/nginx/html/laravel/public; index index.html index.htm index.php; } location ~ \.php$ { root /usr/share/nginx/html/laravel/public; fastcgi_pass unix:/var/run/php-fpm/php-fpm.sock; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root/index.php; include fastcgi_params; } } |
1 | try_files $uri $uri/ /index.php$is_args$args; |
Laravel+Nginxの設定を調べていると、この設定が抜けていることに気づき、追加すると無事に表示されました。
このtry_filesは、リクエストに応じたファイルを返します。まずはドメイン以下のURL部分のファイルを探し、ない場合はディレクトリを探します。
それでもなかった場合は、index.phpファイルを返しています。
参考:nginxのlocationディレクティブ内のリダイレクト処理について
原因がわかるまで、ずいぶん時間をかけてしまった…。
Laravel+Apacheの記事は豊富なのに、Laravel+Nginxはあまりなかったのでメモとして残しておきます。