🐡
サブディレクトリに設置したLaravel8(CentOS7 + Nginx)で、ルーティング先だけが404|NOT FOUNDになる場合
問題
Laravelで表示させたいURL: example.com/stg/
Laravelインストール先: /usr/share/nginx/html/stg/
サーバー: さくらのクラウド CentOS7.9
ググって先人のブログを参考にdefault.confを書き換えてみた結果、
TOPページ : example.com/stg/ → ページ表示成功
ルーティング先 : example.com/stg/hoge/ → 404 | NOT FOUND
ローカル開発環境では問題がないのに、なぜかLaravel側からTOPページ以外で404エラーを返してきた。
解決方法
やはりdefault.confの指定に問題がありました。ちゃんとLaravel公式からコピペしてきて、メインディレクティブとサブディレクティブのところだけを書き換えたところ、無事に解決した。
default.conf
server {
listen 80;
server_name example.com;
#①publicディレクトリのパスを変更
root /usr/share/nginx/html/stg/public;
add_header X-Frame-Options "SAMEORIGIN";
add_header X-XSS-Protection "1; mode=block";
add_header X-Content-Type-Options "nosniff";
index index.php;
charset utf-8;
location / {
root /usr/share/nginx/html/stg;
#②example.com/では静的なindex.htmlを表示させる
index index.html;
}
#③サブディレクトリのディレクティブを追加(example.com/stg/)
location /stg {
try_files $uri $uri/ /index.php?$query_string;
}
#④ついでにビルドしたcss/jsファイルも
location /build {
try_files $uri $uri/ /index.php?$query_string;
}
location = /favicon.ico { access_log off; log_not_found off; }
location = /robots.txt { access_log off; log_not_found off; }
error_page 404 /404.html;
location ~ \.php$ {
#⑤クラウドサーバーのphp-pfmにあわせて変更
fastcgi_pass unix:/var/run/php-fpm/php-fpm.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
include fastcgi_params;
}
location ~ /\.(?!well-known).* {
deny all;
}
}
Discussion