IIS重写URL并使用清理干净的URL

G43贝利

我有以下网址:

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

和:

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

希望我想做的事:重写包含单词的URL post,并有aspx在最后一个干净的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。您是否知道如何正确重新处理我的传入请求?

谢谢 :)

威克多·斯特里比尤

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

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

正则表达式演示

详细资料

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

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章