如何在同一站点上进行永久重定向和重写规则

How can I have permanent redirects and rewrite rules on the same site

在我的 web.config 中,我为 AngularJS (HTML5Mode)

设置了这条规则
<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" />
        <add input="{REQUEST_URI}" pattern="^/(api)" negate="true" />
        <add input="{REQUEST_URI}" pattern="^/token" negate="true" />
      </conditions>
      <action type="Rewrite" url="/" />
    </rule>
  </rules>
</rewrite>

然后我加载了 301 重定向设置如下:

<location path="about.html">
  <system.webServer>
    <httpRedirect enabled="true" destination="/about" httpResponseStatus="Permanent" />
  </system.webServer>
</location>

显然没有到达重定向。我怎样才能让我的重写器只适用于任何没有被重定向的东西?

我希望这是有道理的。

更新

我删除了重写规则只是为了测试重定向是否在没有它的情况下工作。他们这样做了,但我的应用程序仍在运行。 我确定我需要 HTML5 模式的重写规则。不是这样吗?

更新 2

似乎重写器是针对 url 个参数。

我不知道的是您可以将重定向添加到重写规则。如果您先添加它们并将 stopProcessing 标志设置为 true,它将重定向而不是 "hit" 重写规则。

这是一个例子:

  <rules>
    <rule name="301" stopProcessing="true">
      <match url="volleyball" />
      <action type="Redirect" url="/" redirectType="Permanent" />
    </rule>
    <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" />
        <add input="{REQUEST_URI}" pattern="^/(api)" negate="true" />
        <add input="{REQUEST_URI}" pattern="^/token" negate="true" />
      </conditions>
      <action type="Rewrite" url="/" />
    </rule>
  </rules>