You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

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

火山引擎 最新活动