Url Rewrite是IIS的一个扩展。我们可以利用它来为网站创造出强大重定向与重写请求与响应的功能。甚至可以结合Application Request Routing(ARR)提供反向代理的功能。
请求重定向
请求重定向主要通过定义Inbound Rule来定义请求的匹配规则以及重定向规则。其主要有一下元素组成:
元素 | 说明 | |
名字 | 请求的名称 | |
Match URL |
这个主要是用来定义Rule需要匹配的请求Url(Url Path中/后面的字符串)。 |
支持正则匹配,通配符匹配,精确匹配(支持正向或反向匹配) |
Condition |
在Match URL匹配通过的前提下,我们还可以通过添加Condition的方式对请求其他部分(例如:Header)进行匹配。 |
我们可以定义一个或多个Condition。 支持Server Variable(通过Server Variable获取Request Header)做为Condition的匹配input,支持正则匹配 |
Action |
通过Match Url和Condition,我们可以定义要匹配的请求。Action用来定义对匹配到的请求的操作。 |
支持Rewrite和Redirect等操作。 Redirect则是向浏览器发送重定向响应。 (支持正则反向引用来定义Rewrite/Redirect的Url) |
Rule的定义可以通过IIS Manager以可视化方式定义,也可以通过在web.config中以配置的形式定义。(可视化方式会自动生成web.config中的配置)
举例:(将http://localhost:8080/rewrite/index.html?time=now重定向为http://localhost:8080/rewrite/index.html?time=now)
<rewrite> <rules> <rule name="FolderRewrite" stopProcessing="true"> <match url="([a-zA-Z0-9]+)/([a-zA-z0-9]+).html" /> <conditions> <add input="{QUERY_STRING}" pattern=".*" /> </conditions> <action type="Redirect" url="/{R:2}.html?{C:0}" appendQueryString="false" />
<!--反向引用{R:2}引用的是match中的第二个匹配项,{R:0}为pattern匹配到字符串,{C:0}引用的是condition中pattern匹配到的字符串--> </rule> </rules> </rewrite>
结果:
修改响应信息
响应信息的修改是通过定义Outbound Rule来定义匹配规则以及修改规则。可以通过Outbound Rule来修改,添加Response Header/Body.Outbound Rule的主要组成元素如下:
元素 | 说明 | |
名字 | 请求的名称 | |
Match |
这个主要是用来定义Rule需要匹配的响应的条件以及要匹配和操作的目标。 |
支持匹配Response和Server Variable. 如果是匹配Response的话可以定义匹配部分html标签的特定attribute.
|
Condition |
在Match匹配通过的前提下,我们还可以通过添加Condition的方式对请求其他部分(例如:Header)进行匹配。 |
我们可以定义一个或多个Condition。 支持Server Variable(通过Server Variable获取Request Header)做为Condition的匹配input,支持正则匹配 |
Action |
|
|