IIS 部署 Vue/React 单页应用 (SPA) 刷新页面 404/403.18 报错原因及终极解决方案

一、问题现象(

项目环境:

  • 前台项目:http://localhost/CL/
  • 后台项目:http://localhost/CLadmin/
  • 框架:Vue3 + Vue-Router

现象:

  1. 页面内点击菜单跳转完全正常
  2. 一按 F5 刷新页面 → 直接报 404 / 403.18 错误
  3. 首次进入正常,刷新就崩

二、根本原因(最核心、最易懂的解释)

1. 什么是 SPA(单页应用)?

整个项目只有一个 index.html 所有路由 /home、/login、/user/list 都是前端 JS 模拟出来的虚拟路径 服务器上根本不存在这些文件夹!

2. 为什么跳转正常、刷新报错?

  • 菜单跳转 :JS 改地址栏,不请求服务器 → 正常
  • 浏览器刷新 :把完整地址发给 IIS,IIS 去找真实文件夹→ 找不到 → 报 404 → 如果你配置了反向代理 / 跨应用池 → 报 403.18 无权重写

3. 为什么会出 403.18?

IIS 安全策略:默认禁止跨应用程序池进行 URL 重写你的前端、接口、代理不在一个池刷新时 IIS 拦截 → 403.18


三、终极最简单解决方案(不用改 IIS、不用配 web.config)

✅ 方案:把路由从 History 模式 → Hash 模式

只改一行代码,永久解决

修改方法(Vue3/Vue-Router4)

javascript

运行

复制代码
// 原来(报错的写法)
import { createRouter, createWebHistory } from 'vue-router'
const router = createRouter({
  history: createWebHistory(),
  routes
})

// 改成(不报错的写法)
import { createRouter, createWebHashHistory } from 'vue-router'
const router = createRouter({
  history: createWebHashHistory(),
  routes
})

为什么这样改就好了?

# 号后面的路由 不会发送给服务器 刷新时,IIS 只收到 localhost/CL/永远只会访问 index.html永远不会 404 / 403.18


四、修改后效果

  • 地址变成:http://localhost/CL/#/home
  • 刷新任意页面都正常
  • 不用改 IIS
  • 不用加 web.config
  • 不用配置重写规则
  • 不用处理跨应用池

真正一劳永逸!

相关推荐
java1234_小锋5 分钟前
Vue3专题 - 条件渲染
前端·javascript·vue.js
明月_清风12 分钟前
🚀 AI Agent 完全入门指南:从 LLM 到生产落地,新手必懂的 34 个核心概念
前端·后端·ai编程
鸽鸽16 分钟前
Vue 3 API 完全指南:从 Options 到 Composition 的进阶之路
前端·vue.js
名字还没想好☜17 分钟前
React 用 Portal + Context 实现全局 Toast:一次调用、自动消失与队列管理
前端·javascript·react.js·react·next.js
HjhIron27 分钟前
React Router 通关指南:从入门到鉴权,一个项目全搞定
前端
kyson_28 分钟前
如何做一款自适应的数据大屏:`vw/vh`、`rem`、`scale` 应该怎么选?
前端
雪隐33 分钟前
WPF + MVVM 实战系列02-告别 INPC 手写时代,做个体面的现代 WPF 人
前端·后端·c#
肉肉不吃 肉38 分钟前
无渲染组件和组合式函数
前端·javascript·vue.js
其美杰布-富贵-李40 分钟前
01 从项目结构开始认识 Vue 3
javascript·vue.js·ecmascript
未来智慧谷42 分钟前
从 Atlas 关停复盘:AI 应用的三种载体形态怎么选(独立应用 / 浏览器扩展 / 桌面宿主)
前端·人工智能·ai·架构·浏览器