You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

React应用部署至IIS服务器后刷新页面报404错误如何解决

问题原因

React是基于客户端路由的单页应用,路由切换完全由浏览器端的JS通过History API控制,首次访问站点根路径时IIS能正常返回入口文件index.html,后续前端路由跳转不会向服务器发送对应子路径的资源请求。但按F5刷新时,浏览器会直接向IIS请求当前地址栏路径对应的物理文件,IIS在站点目录下找不到对应路径的文件/目录,就会直接返回404错误。

解决操作

前置检查

  • 首先确认IIS已安装**URL重写(URL Rewrite)**模块,该模块是IIS实现路径重写的依赖,未安装的话后续配置的规则不会生效。
  • 确认web.config文件放在站点根目录,和React打包生成的index.html文件处于同一层级。

写入正确的重写规则

将web.config的内容替换为以下配置:

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
  <system.webServer>
    <rewrite>
      <rules>
        <rule name="SPA Route Rewrite" stopProcessing="true">
          <match url=".*" />
          <conditions logicalGrouping="MatchAll">
            <!-- 跳过真实存在的文件请求 -->
            <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />
            <!-- 跳过真实存在的目录请求 -->
            <add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" />
            <!-- 如果有同域部署的/api开头后端接口,跳过这部分请求让其正常走后端逻辑,没有可删除该行 -->
            <add input="{REQUEST_URI}" pattern="^/(api)" negate="true" />
          </conditions>
          <!-- 所有符合条件的请求统一重写到入口文件,交给前端路由处理 -->
          <action type="Rewrite" url="/index.html" />
        </rule>
      </rules>
    </rewrite>
  </system.webServer>
</configuration>
注意事项
  • 如果你的React应用不是部署在站点根目录,而是部署在子路径下(比如https://domain.com/myapp),需要将规则中url="/index.html"修改为对应子路径的入口地址,即url="/myapp/index.html",同时要保证React打包时配置的basename和部署子路径一致。
  • 配置保存后重启对应IIS站点,再刷新子路由页面就不会出现404问题。
  • 不要通过自定义404错误页跳转到index.html的方式解决问题,这种方式会先返回404状态码,影响SEO和接口异常判断,URL重写的方式会正常返回200状态码,符合SPA的运行逻辑。

内容的提问来源于stack exchange,提问作者DA0405

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.26 09:36:17