it编程 > 编程语言 > Javascript

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

9人参与 2025-04-24 Javascript

将 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 接管路由。

location / {
  try_files $uri $uri/ /index.html;
}
rewriteengine on
rewritebase /
rewriterule ^index\.html$ - [l]
rewritecond %{request_filename} !-f
rewritecond %{request_filename} !-d
rewriterule . /index.html [l]

在部署设置中指定 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/' : '/'
};

检查打包后的 index.html

确保引用的 js/css 路径正确,例如:

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

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

问题原因

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

解决方案

location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg)$ {
  expires 1y;
  add_header cache-control "public";
  try_files $uri =404;
}
addtype application/javascript js
addtype text/css css

4. 部署目录结构错误

问题原因

解决方案

server {
  root /path/to/your/dist;
  index index.html;
}

5. 浏览器缓存问题

问题原因

解决方案

// vue.config.js
module.exports = {
  filenamehashing: true // 默认开启
};

总结排查步骤

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

以上为个人经验,希望能给大家一个参考,也希望大家多多支持代码网。

(0)
打赏 微信扫一扫 微信扫一扫

您想发表意见!!点此发布评论

推荐阅读

Vue中SSR的作用是什么

04-24

Vue3中keep-alive的使用及注意事项说明

04-24

如何解决前端使用Axios时的跨域问题

04-24

使用Vue构建动态表单生成器的实现步骤

04-24

Vue中v-model的使用示例详解

04-24

vue + element-plus自定义表单验证(修改密码业务)的示例

04-24

猜你喜欢

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论