React MVC App 的 IIS 重写条件

IT技术 reactjs iis url-rewriting
2022-07-19 02:03:05

我创建了一个 create-react-app 并尝试发布到生产站点。

我的目标是让所有对 /api/* 的调用都通过 MVC 服务器应用程序的控制器。还提供来自 /content/* 和 /static/* 的任何静态文件

所有其他调用都应该服务于 1 文件 /index.html (这是我的react文件所在的位置,它们将处理路由。

我正在使用 IIS 重写module,并且正在尝试将请求的 URL“与模式不匹配”​​与正则表达式一起使用。

我当前的 IIS 设置忽略了“如果模式匹配则不重写”并将所有内容重写为 index.html

这是 IIS 设置: 在此处输入图像描述

这是web.config。我不确定我做错了什么。

 <rewrite>
            <rules>
                <rule name="React Rewrite" enabled="true" patternSyntax="ECMAScript">
                    <match url="(.*)/api/(.*)|(.*)/content/(.*)|(.*)/static/(.*)" negate="true" />
                    <action type="Rewrite" url="/index.html" />
                    <conditions>
                    </conditions>
                </rule>
            </rules>
        </rewrite>
1个回答

我已经通过使用条件解决了它。我的解决方案是:

<rewrite>
            <rules>
                <rule name="React Rewrite" enabled="true" patternSyntax="ECMAScript">
                    <match url="(.*)" negate="false" />
                    <action type="Rewrite" url="/index.html" />
                    <conditions logicalGrouping="MatchAll">
                        <add input="{REQUEST_URI}" pattern="^(/api/)" negate="true" />
                        <add input="{REQUEST_URI}" pattern="^(/content/)" negate="true" />
                        <add input="{REQUEST_URI}" pattern="^(/static/)" negate="true" />
                    </conditions>
                </rule>
            </rules>
        </rewrite>