我有以下网址:
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] 删除。
我来说两句