如何为一个Azure App Service中托管的多个应用程序添加重写规则

时间:2019-07-14 22:16:58

标签: reactjs azure iis azure-web-sites

我将在一个Azure App Service中托管四个不同的应用程序-2个静态reactjs网站和2个.NET CORE API。

应用程序设置在不同的虚拟目录中:

/
/api
/admin
/admin/api

我正在尝试编写一个重定向规则,以便可以为静态站点使用react-router路由,也可以使用.NET Core API路由。

这是我尝试的管理路由,但是唯一起作用的是静态站点的路由,而不是API

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <system.webServer>
    <rewrite>
      <rules>
        <rule name="ReactRoutes" stopProcessing="true">
          <match url="admin/(.*)" />
          <conditions logicalGrouping="MatchAll">
            <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />
            <add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" />
            <add input="{REQUEST_URI}" matchType="Pattern" pattern="api/(.*)" negate="true" />
          </conditions>
          <action type="Rewrite" url="/admin/" />
        </rule>
      </rules>
    </rewrite>
  </system.webServer>
</configuration>

1 个答案:

答案 0 :(得分:1)

我通过编写以下在/ admin根目录中托管的web.config修复了管理员的规则

<?xml version="1.0"?>
<configuration>
  <system.webServer>
    <rewrite>
      <rules>
        <rule name="Rewrite Admin React Routes" enabled="true" stopProcessing="true">
          <match url=".*" />
          <conditions logicalGrouping="MatchAll">
            <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />
            <add input="{REQUEST_URI}" pattern="^/admin/api(.*)$" negate="true" />
            <add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" />
          </conditions>
          <action type="Rewrite" url="/admin/index.html" logRewrittenUrl="false" />
        </rule>
      </rules>
    </rewrite>
  </system.webServer>
</configuration>