web.config的正则表达式将匹配URL的一部分,并允许在此文本之后的任何内容?

时间:2017-07-28 20:39:40

标签: asp.net regex redirect web-config

我正在努力为IIS 7中的web.config文件完成正则表达式。我们有几百个页面将被重定向(根据客户端请求)。其中许多页面的URL模式如下:

我们打算将这些请求重定向到这样的公共页面:

我需要考虑十几个这样的网址格式。所以我只是想让这个重写匹配工作,而不是将所有页面作为重写映射中的键值对应用。这是我到目前为止所做的,你可以看到我已经评论过的一些尝试。

<rewrite>
  <rewriteMaps>
    <rewriteMap name="301Redirects">
      <add key="/index.htm" value="/" />
      <add key="/index.html" value="/" />
      <add key="/customPage.htm" value="/" />
    </rewriteMap>
  </rewriteMaps>
  <rules>
    <rule name="301 Redirect Rule">
      <match url=".*" />
      <conditions>
        <add input="{301Redirects:{REQUEST_URI}}" pattern="(.+)" />
      </conditions>
      <action type="Redirect" url="{C:1}" />
    </rule>
<!-- Here is the rule I can't get to work. -->
    <rule name="301 to aaa/bbb" stopProcessing="true">
      <match url="^/aaa-bbb([\d\w\s])" />
      <!--<match url="^/aaa-bbb(.{0,1})" />-->
      <!--<match url="^/aaa-bbb(.?)" />-->
      <!--<match url="^/aaa-bbb(.*)$" />-->
      <!--<match url="^/aaa-bbb(\s\S)" />-->
      <!--<match url="^/aaa-bbb[\s\S]*/([\s\S]*?(.htm|.html))" />-->
      <!--<match url="^/aaa-bbb(.)" />-->
      <!--<match url="^/aaa-bbb(.*)" />-->
      <!--<match url="^/aaa-bbb([ _0-9a-z-]+)" />-->
      <action type="Redirect" url="/aaa/bbb" redirectType="Permanent" />
    </rule>
  </rules>
</rewrite>

现在做的是,如果我输入以下网址。

这将成功重定向到:

但是在aaa-bbb结束时附加任何其他内容最终会产生404错误。谢谢你的帮助。

1 个答案:

答案 0 :(得分:2)

问题是您使用/开始了正则表达式。在<match url=重写模块中,将路径与开始斜线(例如:aaa-bbb/different1.html)与正则表达式进行比较。工作示例是:

<rule name="301 to aaa/bbb" stopProcessing="true">
    <match url="^aaa-bbb(.?)" />
    <action type="Redirect" url="/aaa/bbb" redirectType="Permanent" />
</rule>