IIS使用extesion重写URL以清除URL

时间:2017-01-16 12:07:43

标签: asp.net regex url-rewriting

我有以下网址:

  

https://blog.test.com/search.aspx

  

https://blog.test.com/post/2017/01/BlogPostNumberOne.aspx

想要我做: 重写包含单词post的网址,并在最后将aspx更改为没有扩展名的干净网址。例如:

  

https://blog.test.com/search.aspx

     

- > 没有模式匹配,没有

     

https://blog.test.com/post/2017/01/BlogPostNumberOne.aspx

     

- > MATCH ,重写为https://blog.test.com/post/2017/01/BlogPostNumberOne

我尝试了以下正则表达式:^(?=.*/post/)(?=.*aspx$),我的web.config看起来像这样:

<rule name="Redirect to clean URL" stopProcessing="true">
     <match url="^(?=.*/post/)(?=.*aspx$)" ignoreCase="true"/>
     <action type="Redirect" url="{R:1}"/>
</rule>

它根本不起作用,有时会返回500.你知道如何正确地重新传入我的传入请求吗?

Thx:)

1 个答案:

答案 0 :(得分:3)

它不起作用,因为您只使用零宽度断言而没有在{R:1}替换中引用的捕获组。将模式更改为消费模式:

url="^((?:.*/)?post/.*)\.aspx$"
      |               |
      |---  R : 1  ---|

请参阅regex demo

<强>详情:

  • ^ - 字符串输入的开始
  • ((?:.*/)?post/.*) - 第1组捕获以下序列:
    • (?:.*/)? - 一个可选的组,匹配除了换行符号之外的任何0 +字符,尽可能多地覆盖到最后/并包含它
    • post/ - 文字字符序列/post/(因此,字符串输入应以post/或任何内容({1}}开头)
    • /post/ - 除尽可能多的换行符号之外的任何0 +字符
  • .* - 文字字符序列\.aspx
  • .aspx - 字符串输入结束。