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

如何在Nginx中配置至带哈希文件名的文件的重定向?

解决Single-spa动态哈希文件的Nginx 302重定向问题

方案一:部署时创建符号链接(推荐)

这种方式通过部署脚本配合Nginx配置,精准指向最新的带哈希文件,避免正则匹配的不确定性:

  1. 部署脚本调整:每次构建微前端后,生成带哈希的文件(如app.123abc.js),同时在dist目录下创建一个符号链接app.js,指向最新的带哈希文件。例如在shell脚本中添加:

    # 删除旧的符号链接(如果存在)
    rm -f dist/app.js
    # 创建新的符号链接,指向最新的带哈希文件(假设当前目录下只有一个带哈希的app文件)
    ln -s $(ls -t dist/app.*.js | head -n1) dist/app.js
    
  2. Nginx配置:在你的server块中添加如下location规则,将无哈希的请求重定向到符号链接指向的实际带哈希文件:

    location = /dist/app.js {
        # 获取符号链接指向的实际文件名,并重定向
        rewrite ^/dist/app\.js$ /dist/$(basename $realpath_root$uri) permanent;
    }
    
    • $realpath_root$uri会解析符号链接的真实文件路径
    • basename提取出带哈希的文件名(如app.123abc.js)
    • permanent返回301永久重定向(若需临时重定向,替换为redirect即可返回302)

方案二:纯Nginx正则匹配(无需修改部署脚本)

如果无法调整部署脚本,可以利用Nginx的正则匹配和文件存在性检查,自动匹配带哈希的文件:

在server块中添加如下配置:

location = /dist/app.js {
    # 如果请求的无哈希文件不存在,尝试匹配带哈希的版本
    if (!-f $request_filename) {
        # 正则匹配带哈希的文件格式(假设哈希由数字和小写字母组成)
        rewrite ^/dist/app\.js$ /dist/app\.[0-9a-f]+\.js? permanent;
    }
}

注意:这种方式依赖部署时dist目录下仅保留最新的带哈希文件,如果存在多个同前缀的带哈希文件,Nginx会匹配正则表达式命中的第一个文件,可能不是最新版本。

验证配置

配置完成后,重启Nginx使配置生效:

nginx -s reload

访问http://your-domain/dist/app.js,应该会被重定向到对应的dist/app.123abc.js。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 15:02:47