Angular部署IIS后刷新页面出现404错误的解决方案求助
解决Angular部署IIS后刷新页面404问题
我明白你遇到的困扰了——Angular作为单页应用(SPA),前端路由在刷新时会让IIS误以为要找对应的物理文件,自然就返回404了。你之前尝试的.htaccess是Apache服务器的配置,IIS得用web.config,而且你的web.config配置有个关键问题,我来帮你修正:
首先确认前提条件
- 确保你的IIS服务器已经安装了URL重写模块。如果没装,打开IIS管理器,点击右上角的“Web平台安装程序”,搜索“URL Rewrite”并安装,这个模块是实现重写规则的核心。
替换为正确的web.config配置
把你当前的web.config替换成下面的内容,放在dist文件夹的根目录(也就是IIS站点的根目录):
<configuration> <system.webServer> <rewrite> <rules> <rule name="Angular Routes" stopProcessing="true"> <match url=".*" /> <conditions logicalGrouping="MatchAll"> <!-- 排除真实存在的文件和目录 --> <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" /> <add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" /> </conditions> <!-- 把所有非文件/目录的请求重写到index.html,由Angular处理路由 --> <action type="Rewrite" url="/index.html" /> </rule> </rules> </rewrite> </system.webServer> </configuration>
为什么之前的配置无效?
你之前的规则是把请求重写到/home,但IIS依然会去寻找名为home的物理文件/目录,当然找不到。正确的做法是把所有前端路由的请求转发到Angular的入口文件index.html,由Angular自己解析/home这个路由,这样刷新时就能正常加载对应的组件了。
额外检查项
- 确认
index.html里的<base href="/">配置正确:如果你的项目部署在IIS的子站点(比如www.test.com/myapp),需要把base href改成<base href="/myapp/">,同时web.config里的url也要对应修改为/myapp/index.html。 - 确保dist文件夹的所有文件都完整部署到了IIS站点的根目录,没有遗漏。
- 重启IIS站点,让新的
web.config配置生效。
做完这些后,再刷新www.test.com/home,应该就能正常加载页面,不会出现404错误了。
内容的提问来源于stack exchange,提问作者Xtremcool




