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 ---|
见
详细信息:
-开始字符串输入^
-第1组捕获以下序列:((?:.*/)?post/*)
-一个可选组,尽可能多地匹配除换行符号以外的任何0+字符,直到最后一个(?:.*/)?
,并包括它/
-文字字符序列post/
(因此,字符串输入应以/post/
或任何小于等于post/
的字符开头)/post/
-尽可能多的任何0+字符,断线符号除外*
-文字字符序列\.aspx
.aspx
-字符串输入结束$
{R:1}
替换中引用的捕获组。将正则表达式更改为url=“^(.*/post/*)\.aspx$”
它适用于不包含“post”的url。但是当我键入时,什么都没有发生,它也没有重写它。aspxIt一定是传递给正则表达式引擎的字符串输入的问题。请尝试url=“^((?:.*/)?post/.*)\.aspx$”
。注意,正则表达式实际上要求字符串中存在post
子路径。它不能匹配其他没有/part/
的URL。这样,你能更新你的答案吗?我会用绿色的复选标记。感谢您的帮助是的,主机部分之后的初始/
没有传递给正则表达式引擎,因此,*/
必须用可选组包装,最好用作非捕获组。