solo regulares regular que probar online numeros mayores letras expresiones expresion especiales espacios ejemplos consecutivos caracteres regex iis-7 url-rewriting hyphen underscores

regex - que - probar expresiones regulares



Rerwrite de URL de IIS7: ¿cómo reemplazar todos los guiones bajos con guiones en una expresión regular? (1)

Estoy usando la función Reescribir URL en IIS7 para convertir la url:
/main.asp?category=Name_Of_A_Product
...dentro:
/ category / name-of-a-product /

He creado las reglas de redirección y reescritura a continuación, que hacen la mayoría del trabajo, excepto que no puedo encontrar una forma de reemplazar los guiones bajos por guiones.

Cada URL puede tener entre cero y muchos guiones bajos y estoy tratando de reemplazarlos en una sola expresión regular, para evitar cadenas de redireccionamientos 301 (ya que creo que eso es malo para SEO).

¿Sabes cómo (o si) se puede hacer esto?

<rule name="Redirect REAL to FRIEDNLY" enabled="true" stopProcessing="true"> <match url="^main/.asp$" /> <conditions logicalGrouping="MatchAll" trackAllCaptures="false"> <add input="{REQUEST_METHOD}" pattern="^POST$" negate="true" /> <add input="{QUERY_STRING}" pattern="^category=([^=&amp;]+)($|&amp;(.*))$" /> </conditions> <action type="Redirect" url="category/{ToLower:{C:1}}/" appendQueryString="false" /> </rule> <rule name="Rewrite FRIEDNLY to REAL" stopProcessing="false"> <match url="^category/([^/]+)/?$" /> <conditions logicalGrouping="MatchAll" trackAllCaptures="false"> <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" /> <add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" /> </conditions> <action type="Rewrite" url="main.asp?category={R:1}" /> </rule>


Lamentablemente, IIS7 tiene algunas limitaciones:

  • solo puedes capturar 9 grupos C:1 ... C:9
  • solo hay una función de cadena y eso es ToLower

Por eso, estará limitado a una URL con un máximo de 9 palabras separadas por un máximo de 8 guiones bajos (por ejemplo. /main.asp?category=One_Two_Three_Four_Five_Six_Seven_Eight_Nine ) y se le /main.asp?category=One_Two_Three_Four_Five_Six_Seven_Eight_Nine a utilizar 9 reglas de reescritura:

Palabra única: /main.asp?category=Product

<rule name="Redirect REAL to FRIEDNLY 1" enabled="true" stopProcessing="true"> <match url="^main/.asp$" /> <conditions logicalGrouping="MatchAll" trackAllCaptures="false"> <add input="{REQUEST_METHOD}" pattern="^POST$" negate="true" /> <add input="{QUERY_STRING}" pattern="^category=([A-Za-z]+)$" /> </conditions> <action type="Redirect" url="category/{ToLower:{C:1}}/" appendQueryString="false" /> </rule>

Dos palabras: /main.asp?category=Some_Product

<rule name="Redirect REAL to FRIEDNLY 2" enabled="true" stopProcessing="true"> <match url="^main/.asp$" /> <conditions logicalGrouping="MatchAll" trackAllCaptures="false"> <add input="{REQUEST_METHOD}" pattern="^POST$" negate="true" /> <add input="{QUERY_STRING}" pattern="^category=([A-Za-z]+)_([A-Za-z]+)$" /> </conditions> <action type="Redirect" url="category/{ToLower:{C:1}}-{ToLower:{C:2}}/" appendQueryString="false" /> </rule>

Tres palabras: /main.asp?category=Some_New_Product

<rule name="Redirect REAL to FRIEDNLY 3" enabled="true" stopProcessing="true"> <match url="^main/.asp$" /> <conditions logicalGrouping="MatchAll" trackAllCaptures="false"> <add input="{REQUEST_METHOD}" pattern="^POST$" negate="true" /> <add input="{QUERY_STRING}" pattern="^category=([A-Za-z]+)_([A-Za-z]+)_([A-Za-z]+)$" /> </conditions> <action type="Redirect" url="category/{ToLower:{C:1}}-{ToLower:{C:2}}-{ToLower:{C:3}}/" appendQueryString="false" /> </rule>

... ... ... ... ... ...