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

NGINX中HTML回退页面异常:多级路径下静态资源404

问题分析

出现这个问题的核心原因是静态资源使用了相对路径:当访问多级路径(如test.site/level-1/non-existent-page)时,浏览器会将当前页面的路径视为/level-1/,因此相对路径的css/file.css会被解析为/level-1/css/file.css,但实际资源存储在根目录的/css/下,导致404错误。

解决方案

方案一:修改HTML资源引用为绝对路径(推荐)

直接将所有CSS、JS、图片等静态资源的引用改为以/开头的绝对路径,确保浏览器始终从网站根目录加载资源:

  • 原写法:<link rel="stylesheet" href="css/file.css">

  • 修改后:<link rel="stylesheet" href="/css/file.css">

  • 原写法:<script src="js/file.js"></script>

  • 修改后:<script src="/js/file.js"></script>

这种方式从根源解决路径解析问题,适配所有页面路径场景,无需额外配置服务器。

方案二:通过Nginx配置强制静态资源从根目录加载

如果无法修改HTML代码,可以在Nginx的server块中添加静态资源专属匹配规则,强制从根目录的对应目录查找资源:

server {
    listen            443 ssl http2;
    listen            [::]:443 ssl http2;
    server_name       test.site;
    set               $base /var/www/test.site;
    root              $base/public;

    # 匹配所有静态资源后缀,强制从根目录加载
    location ~* \.(css|js|png|jpg|jpeg|gif|ico)$ {
        try_files $uri =404;
        expires 1y; # 适配缓存需求,设置长期缓存
    }

    # 保留原有的index.html fallback规则
    location / {
        try_files $uri $uri/ /index.html;
    }
}

也可以针对特定目录单独配置:

# 单独处理CSS目录
location /css/ {
    try_files $uri =404;
    expires 1y;
}

# 单独处理JS目录
location /js/ {
    try_files $uri =404;
    expires 1y;
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 17:33:14