欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  网络运营

详解IIS中的重写工具下关于操作重定向URL中的{R:N}与{C:N}使用介绍

程序员文章站 2022-07-09 16:27:49
url rewrite(url重写工具)作为iis下较为常用的模块组件, 提供了重写、重定向、自定义响应、中止请求等功能。但是其相关的中文资料比较缺少,官方倒是有完整和详细...

url rewrite(url重写工具)作为iis下较为常用的模块组件, 提供了重写、重定向、自定义响应、中止请求等功能。但是其相关的中文资料比较缺少,官方倒是有完整和详细的英文文档,之前我在项目中遇到需要设置重写/重定向url操作规则时,对于范例中的{r:n}和{c:n}规则就理解的十分辛苦,因此写下本文分享下经验。

这里先附上官网的文档,其实文档链接在iis的url重写模块的右边菜单就有:url rewrite module configuration reference(url重写模块配置参考)  ,也可以看这篇url 重写模块页

r和c表示的是什么意思?

这里先看官方文档的说明:

back-references to condition patterns are identified by {c:n} where n is from 0 to 9. back-references to rule patterns are identified by {r:n} where n is from 0 to 9. note that for both types of back-references, {r:0} and {c:0}, will contain the matched string.

文档链接地址:using back-references in rewrite rules

{r:n}和{c:n}主要是使用了正则表达式的back-references(中文名词:反向引用/逆向引用/后向引用/向后引用),关于正则的反向引用这里就不多加说明,可以参考这三篇文章:

反向引用using back references

我们只要知道r表示的是rule patterns(规则模式,就是匹配url的模式),c表示的是condition patterns(条件模式,规则条件的属性)。{r:n}和{c:n}中的n是指正则表达式中反向引用所捕获到的组号,有0至9的组号。需要注意的是,{r:0}和{c:0}表示全部匹配。其它的比如{r:1}或者{c:1}的组号是1,所以会匹配到分组1所捕获到的内容,其他带组号的则对应其正则所匹配到的组号内容。

关于规则模式和规则条件,可以参考这两篇文章

详解iis中url重写工具的规则条件(rule conditions)

详解iis中url重写工具的匹配url-规则模式(rule patterns)

示例详解说明{r:n}和{c:n}

假设我们要将地址http://192.168.1.100:8080/home/testurlrewrite做301重定向到http://192.168.1.100:8080/testurlrewrite/index,那么我们iis中的设置如下:

1、匹配url(rule patterns):

详解IIS中的重写工具下关于操作重定向URL中的{R:N}与{C:N}使用介绍

上图中我们设置模式的正则表达式为^(.*?)/?home(/testurlrewrite)$,我们点击打开测试模式,输入要测试匹配的url地址:http://192.168.1.100:8080/home/testurlrewrite,如下图所示:

详解IIS中的重写工具下关于操作重定向URL中的{R:N}与{C:N}使用介绍

由上图可知,我们成功匹配了测试的url,根据匹配模式的正则,我们一共可以捕获到3组内容,其中{r:0}上面有说过表示的是全部的内容,{r:1}捕获到的是http://192.168.1.100:8080,{r:2}捕获到的反向引用是/testurlrewrite

2、规则条件(rule conditions):

详解IIS中的重写工具下关于操作重定向URL中的{R:N}与{C:N}使用介绍

这里我们添加了一个条件过滤,只匹配192.168.1.100:8080这个http_host主机。在测试的时候只捕获到一个反向引用组,即{c:0}:

详解IIS中的重写工具下关于操作重定向URL中的{R:N}与{C:N}使用介绍

3、操作规则(rule action):

最后设置操作规则,设置重定向url为:{r:2}/index,上面我们已经知道{r:2}就是反向引用所捕获的/testurlrewrite,完整重定向的url地址为:/testurlrewrite/index。这样就成功实现了使用反向引用来进行重定向操作。

详解IIS中的重写工具下关于操作重定向URL中的{R:N}与{C:N}使用介绍