标准答案
- hash 模式的 URL 类似 /#/user/1,# 后面的内容不会发送给服务器,所以刷新和直接打开通常都能落到同一个入口页。
- history 模式的 URL 类似 /user/1,更接近普通路径,需要服务器理解这个路径。
- SPA 在 history 模式下刷新 /user/1 时,浏览器会向服务器请求 /user/1。如果服务器没有兜底到 index.html,就会返回 404。
- 部署 history 模式时,Nginx、Apache、Node 服务、CDN 或对象存储都要配置 fallback,让未知前端路由返回入口文件。
- 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 仍然需要处理渲染和元信息。