Microsoft IIS no viene con un sistema de reescritura de URLs (algo tipo mod_rewrite de Apache) por lo que se debe añadir software 3rd party que añada el ISAPI filter adecuado para que cumpla dicha función. Después de evaluar entre las opciones disponibles se usó el IIS Mod-Rewrite de MicroNovae.

Se trata de una versión del mod_rewrite de Apache adaptada a IIS. Los valores de configuración son similares, aunque para mayor seguridad consulta la documentación de los métodos válidos en http://www.micronovae.com/ModRewrite/ref/RewriteRule.html

Podemos ver la configuración arrancando el IIS Mod-Rewrite Control Center:

Se deben tener en cuenta los siguientes aspectos:

  • Por un bug en una versión 3.7.6, el sistema no hacía correctamente el rewrite cuando había espacios en blanco en un archivo. Se aplicó el workaround mediante la especificación de la entrada esc de la forma siguiente:

RewriteMap esc int:escape
RewriteRule ^/directory/(.+)$ /${esc:$1} [NC,L,QSA]

Para la última versión que tenemos (la 3.7.12) no se debe hacer este workaround y las entradas se dejarán tal que:

RewriteMap esc int:escape
RewriteRule ^/directory/(.+)$ /$1 [NC,L,QSA]

  • Se debe añadir una primera entrada con el path entero para que en el caso que el archivo exista lo muestre sin aplicar reglas siguientes.

RewriteCond “d:/Inetpub/www.domain.com_wwwroot/%{REQUEST_FILENAME}” -f
RewriteRule .* – [L]

  • El bloque entero de configuración para que redireccione /directory, /directory/ y /directory/cualquiercosa a una misma URL es el siguiente:

RewriteRule ^/directory$ /directory/ [NC,R=301]
RewriteRule ^/directory/(.+)$ /$1 [NC,L,QSA]
RewriteRule ^/directory/$ /DefaultDirectory.aspx [NC,L,QSA]

  • Es importante que en todas las lineas exista el parámetro NC, ya que de esta forma se fuerza un no case-sensitive, con lo que la redirección la aplicará tanto si es /directory como /Directory, por ejemplo.