我有以下网址:
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:)
答案 0 :(得分:3)
它不起作用,因为您只使用零宽度断言而没有在{R:1}
替换中引用的捕获组。将模式更改为消费模式:
url="^((?:.*/)?post/.*)\.aspx$"
| |
|--- R : 1 ---|
请参阅regex demo
<强>详情:
^
- 字符串输入的开始((?:.*/)?post/.*)
- 第1组捕获以下序列:
(?:.*/)?
- 一个可选的组,匹配除了换行符号之外的任何0 +字符,尽可能多地覆盖到最后/
并包含它post/
- 文字字符序列/post/
(因此,字符串输入应以post/
或任何内容({1}}开头)/post/
- 除尽可能多的换行符号之外的任何0 +字符.*
- 文字字符序列\.aspx
.aspx
- 字符串输入结束。