Asp.net IIS使用extesion重写URL以清除URL

Asp.net IIS使用extesion重写URL以清除URL,asp.net,regex,url-rewriting,Asp.net,Regex,Url Rewriting,我有以下网址: https://blog.test.com/search.aspx 以及: https://blog.test.com/post/2017/01/BlogPostNumberOne.aspx 想要我想要做的事: 重写包含单词post的URL,并将aspx结尾处的URL重写为一个干净的URL,不带扩展名。例如: https://blog.test.com/search.aspx ->无模式匹配,不执行任何操作 https://blog.test.com/post/2017/01/B

我有以下网址:

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

以及:

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

想要我想要做的事: 重写包含单词
post
的URL,并将
aspx
结尾处的URL重写为一个干净的URL,不带扩展名。例如:

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

->无模式匹配,不执行任何操作

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

->匹配,重写为
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:)

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

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

详细信息

  • ^
    -开始字符串输入
  • ((?:.*/)?post/*)
    -第1组捕获以下序列:
    • (?:.*/)?
      -一个可选组,尽可能多地匹配除换行符号以外的任何0+字符,直到最后一个
      /
      ,并包括它
    • post/
      -文字字符序列
      /post/
      (因此,字符串输入应以
      post/
      或任何小于等于
      /post/
      的字符开头)
    • *
      -尽可能多的任何0+字符,断线符号除外
  • \.aspx
    -文字字符序列
    .aspx
  • $
    -字符串输入结束

它不起作用,因为您只使用零宽度断言,而没有在
{R:1}
替换中引用的捕获组。将正则表达式更改为
url=“^(.*/post/*)\.aspx$”
它适用于不包含“post”的url。但是当我键入时,什么都没有发生,它也没有重写它。aspxIt一定是传递给正则表达式引擎的字符串输入的问题。请尝试
url=“^((?:.*/)?post/.*)\.aspx$”
。注意,正则表达式实际上要求字符串中存在
post
子路径。它不能匹配其他没有
/part/
的URL。这样,你能更新你的答案吗?我会用绿色的复选标记。感谢您的帮助是的,主机部分之后的初始
/
没有传递给正则表达式引擎,因此,
*/
必须用可选组包装,最好用作非捕获组。