Para quem que assim como eu, fui "obrigado" a desenvolver a aplicação em 2.0 e um dos requisitos era a url amigável
seguindo um tweet do @RamonDuraes
O componente responde pelo namespace UrlRewritingNet.UrlRewrite, desenvolvido em código aberto pode ser encontrado em http://www.urlrewriting.net/149/en/home.html possui o download da documentação, binários, exemplo e fonte,
fazendo uso de configurações no webConfig, e possivel reescrever a url exibida para o usuário e realmente acessar outra url no servidor, assim uma url de servidor com querystring como http://www.urlrewriting.net/149/en/home.html facilmente é transformada em: http://www.urlrewriting.net/149/en/home.html.
Várias soluções para reescrever urls com o ASP.NET possui disvantagens, como perder o suporte a Themes e Master Pages, alem de precisar de direitos de Administrador para instalar a Extensão ISAPI no servidor.
Mas nem tudo é maravilha, você so pode reescrever requisições tratadas pelo ISAP no servidor, ou seja extensões .aspx, para outras extensões deve ser feita uma configuração adicional no IIS ISAP. (disponivel na pagina 14 da documentação), pelo mesmo motivo pode não ser possivel a url sem extensão (faça um teste, aqui funcionou), e requests crossPage (este não funcionou... só com segurança desabilitada =/).
O navegador pode se perder com as imagens e a url da página, sendo necessária a inclusão do root "~" e runat="server" nas imagens conforme <image src=“~/images/pictures.gif“ runat=“server“/>
A configuração do urlRewrite é feita no webconfig adcionando o codigo abaixo
<add name="Rule1" virtualUrl="^~/(.*)/Detail(.*).aspx"
rewriteUrlParameter="ExcludeFromClientQueryString"
destinationUrl="~/Default.aspx?language=$1&id=$2"
ignoreCase="true" />
Onde a virutalUrl é a url a ser redirecionada para a destinationUrl sendo facil identificar o (.*) da expressão regular sendo pasado para o $1 da segunda expressão regular em destinationUrl.
A documentação consta os demais parametros possíveis de serem utilizados.