Quando l'ho dovuto fare io, l'ho fatto dal global.asax, sull'evento Application_BeginRequest utilizzando l'istruzione Context.RewritePath.
E' un pò scomodo, perché devi gestire tutte le casistiche, e ho letto che alcuni IIS danno problemi con questo metodo (fanno scattare il 404 se la pagina non esiste).
Avevo letto un articolo sul rewriting se lo ritrovo lo posto.

