标准答案

  1. hash 模式的 URL 类似 /#/user/1,# 后面的内容不会发送给服务器,所以刷新和直接打开通常都能落到同一个入口页。
  2. history 模式的 URL 类似 /user/1,更接近普通路径,需要服务器理解这个路径。
  3. SPA 在 history 模式下刷新 /user/1 时,浏览器会向服务器请求 /user/1。如果服务器没有兜底到 index.html,就会返回 404。
  4. 部署 history 模式时,Nginx、Apache、Node 服务、CDN 或对象存储都要配置 fallback,让未知前端路由返回入口文件。
  5. history 模式更利于正常 URL 形态和部分 SEO 场景,但不是自动 SEO。内容是否可索引还取决于 SSR、预渲染、meta 和页面内容。

题目解析

hash 和 history 的核心区别是服务器是否感知子路径。

开发环境能正常刷新,不代表线上部署也能正常刷新。线上必须看服务器或 CDN rewrite 规则。

如果项目部署在子目录,还要配置 base,否则资源路径和路由跳转都可能错。

代码示例

Nginx 部署 history 模式时,常见做法是把未知路径兜底到 index.html。

Text
location / {
  try_files $uri $uri/ /index.html;
}
TypeScript
const router = createRouter({
  history: createWebHistory('/'),
  routes
})

常见误区

  • 认为前端改成 history 模式后,服务器不需要任何配置。
  • 刷新详情页 404 时只查 Vue Router 代码,忽略服务器 fallback。
  • 把 history 模式等同于 SEO 友好。SPA 仍然需要处理渲染和元信息。

作者信息