IIS URL重写{R:N}的说明


79

我无法了解{R:N}的目的。任何人都可以澄清何时使用
{R:0}vs.{R:1}

用法示例:

<action type="Redirect" url="http://www.{HTTP_HOST}/{R:0}" />

我看过使用{R:1}的ScottGu

http://weblogs.asp.net/scottgu/archive/2010/04/20/tip-trick-fix-common-seo-problems-using-the-url-rewrite-extension.aspx

而下面有{R:0}

http://weblogs.asp.net/owscott/archive/2009/11/27/iis-url-rewrite-rewriting-non-www-to-www.aspx

看了下面的IIS链接,但不能完全理解下面的定义:

条件模式的后向引用由{C:N}标识,其中N为0到9; N为0。规则模式的反向引用由{R:N}标识,其中N为0到9。请注意,对于两种类型的反向引用,{R:0}和{C:0}都将包含匹配的字符串

Answers:


96

根据文档:

当使用ECMAScript模式语法时,可以通过在必须捕获反向引用的模式部分周围加上括号来创建反向引用。

因此,以以下文档中的示例为例:

^(www\.)(.*)$

www.foo.com条件中使用输入字符串,您将拥有:

{C:0} - www.foo.com
{C:1} - www.
{C:2} - foo.com

简单起见:

  • {R:x}用作规则模式(<match url="...">)的后向引用。
  • {C:x}用作条件模式(<conditions><add input="{HTTP_HOST}" pattern="..."></conditions>)的反向参考
  • 0参考包含整个输入字符串
  • 1参考将包含在所述第一括号中的模式匹配字符串的第一部分()中,2参考第二个,等...直到基准数9

注意:

当使用“通配符”模式语法时,在模式中使用星号(*)时始终创建反向引用。当“?”时,不会创建反向引用。在模式中使用。

http://www.iis.net/learn/extensions/url-rewrite-module/url-rewrite-module-configuration-reference#Using_back-references_in_rewrite_rules


9
如果它对某人有所帮助,这也是一个相关且非常有用的链接:nicolas.guelpa.me/blog/2015/02/21/rewrite-redirect-iis.html
niki b

1
@niki b:您的博客确实对我有很大帮助,因为您明确地说了“重要提示:该规则仅适用于路径;不要让名称url欺骗您。(例如,在example.com/test中,对于“ url”匹配将忽略该方案和域名)和“在调试重定向(尤其是301)时,请记住,浏览器倾向于将其缓存,并且当您更改规则时,它可能导致失败,但是什么都不做发生…… ”。请使用{R:X}来纠正域名示例,因为它令人困惑,我们无法使用“规则”来访问它。
丹尼尔·罗伯

@DanielLobo很高兴博客对您有所帮助。我没有写它,所以如果您愿意,可以直接与博客联系。但是,您在这里指出这一点很高兴,以便人们意识到这一点。
niki b
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.