vue部署到线上为啥会出现404的原因分析及解决

 更新时间:2025年04月17日 11:02:40   作者:大樊子  
这篇文章主要介绍了vue部署到线上为啥会出现404的原因分析及解决方案,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教

将 Vue 项目部署到线上后出现 404 错误,通常是由于 路由配置、服务器设置或资源路径问题 导致的。

以下是常见原因及解决方案:

1. 前端路由(history 模式)未配置服务器支持

问题原因

Vue 默认使用 hash 模式(URL 带 #),但若使用 history 模式(无 # 的 URL),刷新页面时服务器会尝试匹配该路径,但实际不存在对应的文件,导致 404。

示例

访问 https://example.com/user/123,服务器会查找 /user/123/index.html,但 Vue 是单页应用(SPA),所有路由应由前端处理。

解决方案

方案 1:配置服务器重定向到 index.html

确保所有请求都返回 index.html,由 Vue Router 接管路由。

  • Nginx 配置
location / {
  try_files $uri $uri/ /index.html;
}
  • Apache 配置.htaccess):
RewriteEngine On
RewriteBase /
RewriteRule ^index\.html$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.html [L]
  • Netlify/Vercel

在部署设置中指定 rewrites 规则,指向 index.html

方案 2:改用 hash 模式

在 Vue Router 中强制使用 hash 模式:

const router = new VueRouter({
  mode: 'hash', // 默认是 'history'
  routes: [...]
});

2. 静态资源路径错误(JS/CSS 404)

问题原因

打包后的资源路径错误,浏览器无法加载 JS/CSS 文件。

常见于项目部署在子目录(如 https://example.com/subdir/),但静态资源引用的是绝对路径。

解决方案

修改 vue.config.js,设置正确的 publicPath

module.exports = {
  publicPath: process.env.NODE_ENV === 'production' ? '/your-subdir/' : '/'
};
  • 如果部署在根目录,用 publicPath: '/'
  • 如果部署在子目录(如 /subdir/),用 publicPath: '/subdir/'

检查打包后的 index.html

确保引用的 JS/CSS 路径正确,例如:

<script src="/subdir/js/app.123456.js"></script>

3. 服务器未正确配置 MIME 类型

问题原因

服务器未正确返回 .js.css 等文件的 MIME 类型,导致浏览器拒绝加载。

解决方案

  • Nginx 配置
location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg)$ {
  expires 1y;
  add_header Cache-Control "public";
  try_files $uri =404;
}
  • Apache 配置:确保 .htaccess 包含:
AddType application/javascript js
AddType text/css css

4. 部署目录结构错误

问题原因

  • 打包后的 dist 文件夹内容未完整上传到服务器。
  • 服务器根目录未指向 dist 文件夹。

解决方案

  • 确保上传的是 dist 内的所有文件(而非 dist 文件夹本身)。
  • 检查服务器配置的根目录是否正确:
server {
  root /path/to/your/dist;
  index index.html;
}

5. 浏览器缓存问题

问题原因

  • 旧版本缓存导致加载异常。

解决方案

  • 强制刷新页面(Ctrl + F5Cmd + Shift + R)。
  • 在文件名中添加哈希(Vue CLI 默认已配置):
// vue.config.js
module.exports = {
  filenameHashing: true // 默认开启
};

总结排查步骤

  • 检查服务器路由配置(History 模式需重定向到 index.html)。
  • 验证静态资源路径publicPath 是否正确)。
  • 查看浏览器控制台(Network 面板确认哪些文件返回 404)。
  • 检查服务器日志(如 Nginx 的 error.log)。
  • 清除缓存或使用无痕模式 测试。

如果问题仍未解决,可以提供具体的 部署环境(Nginx/Apache/Netlify 等)错误日志,进一步分析!

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • vue实现按需加载组件及异步组件功能

    vue实现按需加载组件及异步组件功能

    这篇文章主要介绍了vue实现按需加载组件和异步组件,本文通过实例代码给大家介绍的非常详细,具有一定的参考借鉴价值 ,需要的朋友可以参考下
    2019-05-05
  • Vue使用formData类型上传文件

    Vue使用formData类型上传文件

    这篇文章主要介绍了Vue使用formData类型上传文件方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-08-08
  • antd-DatePicker组件获取时间值,及相关设置方式

    antd-DatePicker组件获取时间值,及相关设置方式

    这篇文章主要介绍了antd-DatePicker组件获取时间值,及相关设置方式,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-10-10
  • 详解VUE调用本地json的使用方法

    详解VUE调用本地json的使用方法

    这篇文章主要介绍了VUE调用本地json的使用方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-05-05
  • vue3中使用v-model实现父子组件数据同步的三种方案

    vue3中使用v-model实现父子组件数据同步的三种方案

    这篇文章主要介绍了vue3中使用v-model实现父子组件数据同步的三种方案,如果只有一个匿名v-model的传递的话,可以使用vue3.3新添加的编译宏,defineModel来使用,每种方案结合示例代码给大家介绍的非常详细,需要的朋友可以参考下
    2023-10-10
  • vue如何实现文件上传及预览

    vue如何实现文件上传及预览

    这篇文章主要介绍了vue如何实现文件上传及预览问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-06-06
  • 关于vue.js中实现方法内某些代码延时执行

    关于vue.js中实现方法内某些代码延时执行

    今天小编就为大家分享一篇关于vue.js中实现方法内某些代码延时执行,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-11-11
  • Vue前端表格导出Excel文件的图文教程

    Vue前端表格导出Excel文件的图文教程

    我们在开发的时候会经常用的导出excel表格功能,刚好自己开发有遇到,就记录一下,下面这篇文章主要给大家介绍了关于Vue前端表格导出Excel文件的相关资料,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2023-04-04
  • vue动态加载本地图片的处理方法

    vue动态加载本地图片的处理方法

    最近遇到了个问题,用v-bind动态绑定img的src,图片加载不出来,所以下面这篇文章主要给大家介绍了关于vue动态加载本地图片的相关资料,需要的朋友可以参考下
    2021-07-07
  • vue3按钮点击频率控制的实现示例

    vue3按钮点击频率控制的实现示例

    在前端开发中,当用户频繁连续点击按钮,可能会导致频繁的请求或者触发过多的操作,本文主要介绍了vue3按钮点击频率控制的实现示例,感兴趣的可以了解一下
    2024-01-01

最新评论