You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Laravel 10 + Nginx下根路由/assets资源404错误求助

问题排查:Laravel 10根路由资源加载404,/home路由正常

我在Ubuntu 22系统上部署了Laravel 10项目,使用Nginx作为服务器。当访问根路由/时,加载public/assets目录下的资源频繁出现net::ERR_ABORTED 404 (Not Found)错误,但访问/home路由(对应同一页面、同一资源文件)时却能正常加载。以下是相关配置文件:

Nginx虚拟主机配置

server {
    listen 80;

    root /var/www/v2-hexagon/public;

    add_header X-Frame-Options "SAMEORIGIN";
    add_header X-XSS-Protection "1; mode=block";
    add_header X-Content-Type-Options "nosniff";

    index index.html index.htm index.php;

    server_name compro.hexagon.co.id www.compro.hexagon.co.id;

    charset utf-8;

    location / {
        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; }

    location ~ \.php$ {
        fastcgi_pass unix:/var/run/php/php8.1-fpm.sock;
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
        include fastcgi_params;
    }

    location ~ /\.(?!well-known).* {
        deny all;
    }
}

routes/web.php 文件

<?php

use Illuminate\Support\Facades\Route;

Route::get('/', function () {
    return view('Home');
})->name('Home');

Route::get('/home', function () {
    return view('Home');
})->name('Home');

Route::get('/about', function () {
    return view('about');
})->name('About');

Route::get('/Portofolio', function () {
    return view('Portofolio');
})->name('Portofolio');

Route::get('/Services', function () {
    return view('Services');
})->name('Services');

Route::get('/News', function () {
    return view('News');
})->name('News');

Route::get('/Career', function () {
    return view('Career');
})->name('Career');

Route::get('/Contact', function () {
    return view('Contact');
})->name('Contact');

Route::get('/News/Post/{id}', function ($id) {
    return view('singlepost', ['id' => $id]);
})->name('singlepost');

Route::get('/Portofolio/Post/{id}', function ($id) {
    return view('singleporto', ['id' => $id]);
})->name('singleporto');

// Route::get('/about_layout', function () {
//     return view('about_layout');
// });

Route::get('/Service/IT Consultation', function () {
    return view('IT Consultation');
})->name('IT Consultation');


Route::get('/Service/Digital Marketing', function () {
    return view('Digital Marketing');
})->name('Digital Marketing');


Route::get('/Service/Branding', function () {
    return view('Branding');
})->name('Branding');

解决方案

核心原因

问题源于视图中资源使用相对路径引用,导致浏览器在根路由/下解析资源路径时出现异常(部分资源路径被错误解析),而/home路由的层级结构让相对路径解析暂时正常。

步骤1:修正视图资源引用方式

在Laravel视图文件(如resources/views/Home.blade.php)中,所有public/assets下的资源必须使用Laravel的asset()辅助函数生成绝对路径,避免相对路径的解析问题。

错误写法(相对路径):

<link rel="stylesheet" href="assets/css/style.css">
<script src="assets/js/app.js"></script>

正确写法(绝对路径):

<link rel="stylesheet" href="{{ asset('assets/css/style.css') }}">
<script src="{{ asset('assets/js/app.js') }}"></script>

步骤2:优化Nginx静态资源处理

在Nginx虚拟主机配置中添加静态资源专属规则,优先处理静态文件,提升性能并避免不必要的PHP解析:

location ~* \.(css|js|png|jpg|jpeg|gif|ico|svg)$ {
    expires 1y;
    add_header Cache-Control "public, immutable";
}

添加后重启Nginx生效:

sudo systemctl restart nginx

步骤3:验证权限与缓存

  1. 确保public/assets目录及文件权限正确,Nginx进程可读取:
sudo chown -R www-data:www-data /var/www/v2-hexagon/public/assets
sudo chmod -R 755 /var/www/v2-hexagon/public/assets
  1. 清理浏览器缓存或使用无痕模式访问,排除旧缓存影响。

额外检查

确认视图中资源引用的文件名与实际文件大小写一致(Linux系统区分大小写),比如避免视图写Assets/css/style.css而实际目录是assets的情况。


内容的提问来源于stack exchange,提问作者Elmo Kucho

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.20 15:19:52