IIS 重写 2 Angular 个应用程序

IIS Rewrite 2 Angular applications

我有 2 个 Angular 申请。一个在我的主域中,另一个在该域内名为 "merchant" 的虚拟目录中。 我想重写两者的规则,这样我就可以在地址栏中输入 URL 而不会出现 404 页面。为此,我在两个文件夹中都放置了 web.config,但我无法让两个应用程序重写规则同时工作。

在主应用程序中 web.config 我有

<rewrite>
      <rules>
        <rule name="block" stopProcessing="true">
            <match url="^merchant/(.*)$" />
            <action type="Redirect" url="merchant/{R:1}" />
          </rule>
       <rule name="Application Routes" patternSyntax="Wildcard">
          <match url="*" />
          <conditions>
            <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />
            <add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" />

          </conditions>
          <action type="Rewrite" url="/" />
        </rule>
      </rules>
    </rewrite>

有了这个 conf,重写对于主应用程序来说效果很好,但对于第二个应用程序来说就不行了。我以为第一条规则会重定向到虚拟文件夹 web.config 但似乎不是。低于我的虚拟文件夹中的规则 web.config:

<rewrite>
      <rules>
        <rule name="AngularJS 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>
          <action type="Rewrite" url="/merchant/" />
        </rule>
      </rules>
    </rewrite>

当然,如果我从主 web.config 中删除所有规则,则第二个可以工作,但不再是第一个了...

如何同时获得两者?

终于找到解决办法了。正如 funkizer 评论的那样,我不得不将所有规则放在同一个 web.config 在主 web.config 下方有 2 个规则

<rewrite>
  <rules>
   <rule name="AngularJS Routes" stopProcessing="true">
      <match url="^merchant/(.*)$" />
      <conditions >
        <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />
        <add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" />
      </conditions>
      <action type="Rewrite" url="merchant/" />
    </rule>
   <rule name="Application Routes" patternSyntax="Wildcard">
      <match url="*" />
      <conditions>
        <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />
        <add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" />

      </conditions>
      <action type="Rewrite" url="/" />
    </rule>
  </rules>
</rewrite>

我还必须保留另一个 web.config 但我删除了里面的所有规则。 现在可以使用直接 url

访问这两个应用程序