Pregunta

Estoy usando UrlRewritingNet en Umbraco para hacer algunas URL básica reescritura de URLs de productos y categoría. Todo está bien en mi máquina local (Visual Studio dev-servidor web) y en nuestro servidor de desarrollo interno (Windows Server 2008 con ISS 7, 32 bits). Pero falla en el servidor de producción, que es Windows Server 2008 R2 con IIS 7 (64 bits). El síntoma es que la regla de reescritura no se activa. El servidor simplemente me da un error 404.

Las miradas de reescritura regla como la siguiente:

<add name="CategoryRewrite"
     virtualUrl="^/products/(.*)/(.*).aspx"
     rewriteUrlParameter="ExcludeFromClientQueryString"
     destinationUrl="~/default.aspx?umbPage=1&amp;maincategory=$1&amp;subcategory=$2"
     ignoreCase="true"/>

Las miradas de URL como la siguiente - esto no funciona:

http://example.net/products/category+name/sub+category.aspx

Si cambio de la dirección URL a la siguiente funciona en los 3 ambientes:

http://example.net/products/category%20name/sub%20category.aspx

Está claro que la expresión regular en el atributo virtualUrl falla cuando se utiliza el signo + para el carácter de espacio. Pero debo admitir, que puedo entender por qué la expresión regular no sólo en el servidor Windows 2008 R2.

Estoy buscando ideas sobre cuáles son las diferencias entre el Windows Server 2008 R2 y los otros 2 ambientes. ¿Qué debo tener en cuenta?

Me han confirmado que el System.Web.RegularExpressions.dll es la misma versión de los servidores.

¿Fue útil?

Solución

El problema es que el filtro solicitud IIS7 rechaza URL que contienen + caracteres. La solución es añadir lo siguiente para que Web.config:

<configuration>
 <system.webServer>
  <security>
   <requestFiltering allowDoubleEscaping="true" />
  </security>
 </system.webServer>
</configuration> 

Para más detalles: http: //blogs.iis.net/thomad/archive/2007/12/17/iis7-rejecting-urls-containing.aspx

Un compañero de trabajo tiene la brillante idea para ejecutar el sitio web en su propio IIS. Y entonces el error se define además como un 404.11, y de allí en una solución era simple.

Otros consejos

Esto me parece extraño porque su expresión coincide también '+' caracteres. Tal vez el problema es debido al primer carácter de la expresión regular, a partir de la cadena '^' que está utilizando. Tal vez en el servidor de producción se obtiene una URL absoluta y en el servidor de entorno de desarrollo de una dirección URL relativa pasado al módulo de reescritura.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top