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

Next.js应用加载本地静态PDF点击跳转404配置问题排查

问题原因&解决方法

1. 直接错误:href变量被错误包裹为对象

你在定义AGB的导航项时,错误将导入的PDF路径变量用大括号包裹,生成了一个JS对象而非字符串路径:

// 错误写法:多了一层大括号,生成 {Agb: 'xxx/AGB.pdf'} 对象
{ name: 'AGB', href: {Agb} },

对象转换为字符串后就是你地址栏显示的[object Object],自然返回404。
修复:去掉多余大括号即可

{ name: 'AGB', href: Agb },

2. webpack配置遗漏项

当前的file-loader配置没有指定输出路径和公共访问路径,Next.js构建后PDF文件的访问路径会不匹配,需要补充配置项:

module.exports = {
  webpack: (config, options) => {
    config.module.rules.push({
      test: /\.pdf$/,
      // 排除不需要处理的文件夹,避免冲突
      exclude: /node_modules/,
      use: [
        {
          loader: 'file-loader',
          options: {
            // 公共访问路径,对应Next.js静态资源访问规则
            publicPath: '/_next/static/pdf',
            // 构建后文件输出路径
            outputPath: 'static/pdf',
            // 保留原文件名,也可以加hash避免缓存
            name: '[name].[ext]',
            // 关闭ES模块导出,适配CommonJS导入规则
            esModule: false
          },
        } 
      ]
    })
    return config
  },
}

3. 额外优化建议

给target="_blank"的a标签补充rel="noopener noreferrer"属性,避免安全风险:

<a 
  href={item.href} 
  className="text-base text-gray-500 hover:text-gray-900" 
  target="_blank"
  rel="noopener noreferrer"
>
  {item.name}
</a>

如果不想额外配置webpack,也可以直接把PDF文件放到项目根目录的public文件夹下,不需要导入也不需要配置loader,直接写路径即可:

{ name: 'AGB', href: '/AGB.pdf' },

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 10:27:06