如何在同一站点上进行永久重定向和重写规则
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>
在我的 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>