Aclaración de IIS URL Rewrite {R: N}

81

No he podido entender el propósito de {R: N}. ¿Alguien podría aclarar cuándo usar
{R:0}vs.{R:1}

ejemplo de uso:

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

Vi a ScottGu usando {R: 1}

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

Considerando que, a continuación tiene {R: 0}

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

Eché un vistazo al enlace de IIS a continuación, pero no pude digerir la definición a continuación:

Las referencias a patrones de condición se identifican mediante {C: N} donde N es de 0 a 9; Las referencias inversas al patrón de reglas se identifican mediante {R: N} donde N es de 0 a 9. Tenga en cuenta que para ambos tipos de referencias inversas, {R: 0} y {C: 0}, contendrán la cadena correspondiente.

Nil Pun
fuente

Respuestas:

96

Según la documentación:

Cuando se utiliza una sintaxis de patrón ECMAScript, se puede crear una referencia inversa poniendo paréntesis alrededor de la parte del patrón que debe capturar la referencia inversa.

Entonces, tomando el ejemplo que sigue en la documentación:

^(www\.)(.*)$

Y usando la cadena de entrada www.foo.comen las condiciones , tendrá:

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

Para hacerlo simple:

  • {R:x}se utiliza como referencia posterior del patrón de reglas ( <match url="...">).
  • {C:x}se utiliza como referencia posterior del patrón de condición ( <conditions><add input="{HTTP_HOST}" pattern="..."></conditions>)
  • La 0referencia contiene toda la cadena de entrada.
  • La 1referencia contendrá la primera parte de la cadena que coincida con el patrón en el primer paréntesis (), la 2referencia el segundo, etc ... hasta el número de referencia9

Nota:

Cuando se usa la sintaxis de patrón "comodín", las referencias inversas siempre se crean cuando se usa un símbolo de asterisco (*) en el patrón. No se crean referencias anteriores cuando "?" se utiliza en el patrón.

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

mosca de queso
fuente
9
En caso de que ayude a alguien, este también es un enlace relacionado y muy útil: nicolas.guelpa.me/blog/2015/02/21/rewrite-redirect-iis.html
niki b
1
@niki b: tu blog me ayudó mucho por lo que dices explícitamente " Importante: la regla solo se aplica a la ruta; no dejes que la URL del nombre te engañe. (por ejemplo, en example.com/test , el esquema y el nombre de dominio se ignoran para la coincidencia de "url") "y" Recuerde siempre que cuando depura un redireccionamiento (específicamente un 301), los navegadores tienden a almacenarlos en caché y que puede generar frustración cuando cambia la regla, pero nada sucede… ". Corrija su ejemplo con el nombre de dominio usando {R: X} porque es confuso, no tenemos acceso a él con las Reglas.
Daniel Lobo
@DanielLobo Me alegro de que el blog te haya ayudado. Sin embargo, no lo escribí, así que si quieres, puedes contactar directamente al blogger. Pero es bueno que lo hayas señalado aquí para que la gente lo sepa.
niki b