Vue 项目部署在子目录下时hash vs history 的真实区别解析

 更新时间:2026年01月05日 09:59:20   作者:Knight_AL  
Vue子目录部署中,hash模式稳定且无需后端配合,而history模式需要后端支持否则容易出问题,子目录部署下,hash模式天生安全且页面刷新不会404,而history模式需要正确配置Nginx才能正常工作,本文给大家介绍Vue部署在子目录下时hash vs history区别,感兴趣的朋友一起看看吧

在 Vue 项目部署中, 子目录部署是一个非常常见、但也非常容易踩坑的场景,例如:

http://ip:port/wvp/

而不是默认的:

http://ip:port/

这时,Vue Router 的 hash 模式history 模式 在行为上会出现本质区别

一、先说结论

在子目录(如 /wvp/)下部署 Vue 项目:

  • ✅ hash 模式:稳定、省心,几乎不需要后端配合
  • ⚠️ history 模式:必须配合后端 / Nginx,否则刷新必 404

如果是内部系统 / 后台管理系统强烈推荐 hash 模式

二、hash 和 history 的 URL 本质区别

1️⃣ hash 模式

/wvp/#/dashboard

特点:

  • # 后面的内容 不会发送给服务器
  • 属于浏览器行为
  • 前端路由完全由 Vue 接管

2️⃣ history 模式

/wvp/dashboard

特点:

  • 完整路径会发送给服务器
  • 服务器必须知道如何处理这个路径

三、子目录 + hash:为什么几乎不会出问题?

访问流程解析

当访问:

http://ip:port/wvp/#/dashboard

浏览器与服务器的交互是:

浏览器请求 → /wvp/
服务器返回 → index.html
Vue Router 解析 → #/dashboard

👉 服务器永远只看到 /wvp/

hash 模式的优势

  • 刷新页面不会 404
  • 浏览器直接访问任意路由都正常
  • 后端 / Nginx 无需任何额外配置

📌 子目录部署下,hash 模式天生安全

四、子目录 + history:为什么容易翻车?

访问流程解析

访问:

http://ip:port/wvp/dashboard

服务器接收到的是:

/wvp/dashboard

如果服务器没有配置该路径:

→ 找不到资源
→ 返回 404

❌ 页面刷新 404
❌ 浏览器直接访问 404
❌ 前进 / 后退偶发 404

五、history 模式在子目录下必须做哪些配置?

1️⃣ 前端配置(缺一不可)

// vue.config.js
module.exports = {
  publicPath: '/wvp/'
}
// router/index.js
const router = new VueRouter({
  mode: 'history',
  base: '/wvp/',
  routes
})

2️⃣ Nginx / 后端配置(核心)

Nginx 示例

location /wvp/ {
  try_files $uri $uri/ /wvp/index.html;
}

含义:

  • 如果是静态资源 → 正常返回
  • 如果不是 → 统一返回 index.html
  • 由 Vue Router 接管路由

如果没有这一步会怎样?

/wvp/dashboard → Nginx找文件 → 找不到 → 404

六、hash vs history:子目录下的真实对比

对比项hash 模式history 模式
子目录部署✅ 非常稳⚠️ 易翻车
是否依赖后端❌ 不需要✅ 必须
页面刷新✅ 永不 404❌ 不配就 404
URL 美观❌ 有 #✅ 干净
SEO❌ 差✅ 好
运维成本⭐ 低⭐⭐⭐ 高

七、什么时候才应该用 history?

  • 对外网站
  • 需要 SEO
  • 需要分享干净 URL
  • 后端 / Nginx 完全可控

否则:

子目录部署 + 内部系统 → hash 是最优解

八、推荐配置(子目录)

// vue.config.js
module.exports = {
  publicPath: '/wvp/'
}
// router/index.js
export default new VueRouter({
  mode: 'hash',
  base: '/wvp/',
  routes
})

✅ 不依赖后端
✅ 刷新不炸
✅ 部署简单

九、总结

hash 是“工程优先”
history 是“美观优先”

在子目录部署场景下,稳定永远比好看重要

到此这篇关于Vue 项目部署在子目录下:hash vs history 的真实区别的文章就介绍到这了,更多相关vue hash vs history区别内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • vue返回首页后如何清空路由问题

    vue返回首页后如何清空路由问题

    这篇文章主要介绍了vue返回首页后如何清空路由问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-06-06
  • vue-router懒加载的3种方式汇总

    vue-router懒加载的3种方式汇总

    这篇文章主要给大家介绍了关于vue-router懒加载的3种方式,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-02-02
  • vue.extend,mixins和vue.component的区别及说明

    vue.extend,mixins和vue.component的区别及说明

    Vue.extend 创建Vue的子类,可视为组件构造函数,Vue.mixin 允许全局添加方法或属性,方便所有组件使用,Vue.component 是插件注册方法,通过Vue.extend创建的组件实例可以注册到Vue全局,使其在任何组件中可用
    2024-09-09
  • 解决Vue编译时写在style中的路径问题

    解决Vue编译时写在style中的路径问题

    下面小编就为大家带来一篇解决Vue编译时写在style中的路径问题。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-09-09
  • 从零开始在vue-cli4配置自适应vw布局的实现

    从零开始在vue-cli4配置自适应vw布局的实现

    这篇文章主要介绍了从零开始在vue-cli4配置自适应vw布局,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-06-06
  • vue2.0如何动态绑定img的src属性(三元运算)

    vue2.0如何动态绑定img的src属性(三元运算)

    这篇文章主要介绍了vue2.0如何动态绑定img的src属性(三元运算)问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-08-08
  • 基于Vue实现卡片无限滚动动画

    基于Vue实现卡片无限滚动动画

    这篇文章主要为大家详细介绍了如何利用Vue制作出卡片无限滚动动画,文中的示例代码讲解详细,对我们学习有一定帮助,需要的可以参考一下
    2022-05-05
  • vue自定义组件如何添加使用原生事件

    vue自定义组件如何添加使用原生事件

    这篇文章主要介绍了vue自定义组件如何添加使用原生事件,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-04-04
  • vuex页面刷新数据丢失解决方法详解

    vuex页面刷新数据丢失解决方法详解

    这篇文章主要为大家介绍了vuex页面刷新数据丢失解决方法详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-07-07
  • vue中定时器setInterval的使用及说明

    vue中定时器setInterval的使用及说明

    这篇文章主要介绍了vue中定时器setInterval的使用及说明,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-03-03

最新评论