ASP.net Web.Config 重定向规则

ASP.net Web.Config Redirect Rules

我对此重定向有疑问。我正在尝试将每个州的安装位置页面永久重定向到新页面。这是一个示例,效果很好。

<rule name="49 set wyoming/installation-locations 301 permanently moved" stopProcessing="true">
  <match url="(.*)" />
  <conditions logicalGrouping="MatchAny" trackAllCaptures="false">
    <add input="{HTTP_HOST}{REQUEST_URI}" pattern="wyoming/installation-locations" />
  </conditions>
  <action type="Redirect" url="/locations/wy/" redirectType="Permanent" />
</rule>

现在,当我必须重定向主安装位置页面(下方)时,它可以正常工作,但是这个新的重定向规则会覆盖上面的规则和其他所有状态的规则。

<rule name="locations redirect" stopProcessing="true">
  <match url="(.*)" />
  <conditions logicalGrouping="MatchAny" trackAllCaptures="false">
    <add input="{HTTP_HOST}{REQUEST_URI}" pattern="installation-locations" />
  </conditions>
  <action type="Redirect" url="/locations/" redirectType="Permanent" />
</rule>

有没有人有什么建议?

尝试将模式设置为在 locations redirect 规则的 installation-locations 之前不接受任何其他内容。

<rule name="locations redirect" stopProcessing="true">
  <match url="(.*)" />
  <conditions logicalGrouping="MatchAny" trackAllCaptures="false">
    <add input="{HTTP_HOST}{REQUEST_URI}" pattern="^(installation-locations)$" />
  </conditions>
  <action type="Redirect" url="/locations/" redirectType="Permanent" />
</rule>

更多信息:https://docs.microsoft.com/en-us/iis/extensions/url-rewrite-module/testing-rewrite-rule-patterns

根据您的描述,最简单的解决方法是修改url重写规则顺序。

由于安装位置也可以匹配 "wyoming/installation-locations" 模式,您会发现位置重定向规则没有用。

据我所知,url重写规则匹配是一个接一个的。它将使用第一个规则,然后是第二个、第三个。如果规则匹配第一个,则不会继续匹配第二个。

我建议你可以尝试使用下面的 url 重写规则,它会很好地工作。

 <rule name="49 set wyoming/installation-locations 301 permanently moved" stopProcessing="true">
  <match url="(.*)" />
  <conditions logicalGrouping="MatchAny" trackAllCaptures="false">
    <add input="{HTTP_HOST}{REQUEST_URI}" pattern="wyoming/installation-locations" />
  </conditions>
  <action type="Redirect" url="/locations/wy/" redirectType="Permanent" />
</rule>
  <rule name="locations redirect" stopProcessing="true">
  <match url="(.*)" />
  <conditions logicalGrouping="MatchAny" trackAllCaptures="false">
    <add input="{HTTP_HOST}{REQUEST_URI}" pattern="installation-locations" />
  </conditions>
  <action type="Redirect" url="/locations/" redirectType="Permanent" />
</rule>

我们通过在页面皮肤中放置服务器端脚本解决了这个问题。

if (DotNetNuke.Entities.Tabs.TabController.CurrentPage.TabName == "Installation Locations")
Response.Redirect("/locations");