Com a chegada do IIS7, abre-se automaticamente um leque de novas oportunidades. Uma delas é a customização de módulos para atender todo e qualquer tipo de requisição e neste cenário o módulo de URL Rewrite desenvolvido pela própria Microsoft, vem explorar um pouco deste potencial ainda tão pouco conhecido.
Com o URL Rewrite é possivel interceptar qualquer tipo de requisição seja ela ASP, ASP.NET ou HTML, e reescrever a URL antes que ela seja processada pelo IIS. A configuração é feita de forma fácil e intuitiva, atendendo tanto usuários experientes quanto os mais iniciantes.
Para usuários que nunca trabalharam com técnicas de URL Rewrite, é possível realizar toda a configuração via IIS Manager remoto (Feature Delegation que está disponível no plano de hospedagem), utilizando-se de interfaces amigáveis e templates já prontos, possuindo inclusive recursos para o teste imediato de regras.
Para usuários mais experientes é possível criar regras apenas alterando o arquivo web.config de sua aplicação. Usuários que já possuam conhecimento do famoso (e obscuro?) mod_rewrite do Linux, existe um recurso integrado (http://learn.iis.net/page.aspx/470/importing-apache-modrewrite-rules/) que permite a importação deste arquivo para dentro do IIS. A própria interface realiza de maneira automática a conversão da sintaxe para os padrões Microsoft.
Seguem abaixo alguns exemplos de regras que podem ser criadas com o IIS7 URL Rewrite, lembrando que se deve colocar as tags dentro do arquivo web.config:
< configuration>< /configuration>
< system.webserver>< /system.webserver>
< rewrite>< /rewrite>
< rules>< /rules>
< rule>….< /rule>
< /configuration>
Esta regra abaixo, reescreve a url originalmente enviada como:
?seudominio.com/exemplo-10.html? para ?seudominio.com/exemplo.asp?id=10?
< rule name=’exemplo 1′>< /rule>
< match ignorecase=’true’ url=’^exemplo-([0-9]+).html$’>< /match>
< action appendquerystring=’false’ type=’Rewrite’ url=’exemplo.asp?id={R:1}’>< /action>
< /rule>
Esta regra abaixo, reescreve a url originalmente enviada como:
?seudominio.com/teste? para ?seudominio.com/exemplo.asp?parametro=teste?
< rule name=’exemplo 2′>< /rule>
< match ignorecase=’true’ url=’^([a-zA-Z0-9_-]+)/?$’>< /match>
< action appendquerystring=’false’ type=’Rewrite’ url=’exemplo.asp?parametro={R:1}’>< /action>
< /rule>
Redirecionamento de domínio para pasta: Esta regra abaixo, redireciona o domínio ?exemplo.com.br? para a pasta ?exemplo? dentro da sua área de site.
< match ignorecase=’true’ url=’^(.*)$’>
< conditions logicalgrouping=’MatchAll’>
< add ignorecase=’true’ input='{HTTP_HOST}’ pattern=’^(www.)?exemplo.com.br’>
< rule enabled=’true’ name=’exemplo 3′ stopprocessing=’true’>< /rule>
< match ignorecase=’true’ url=’^(.*)$’>< /match>
< conditions logicalgrouping=’MatchAll’>< /conditions>
< add ignorecase=’true’ input='{HTTP_HOST}’ pattern=’^(www.)?exemplo.com.br’>< /add>
< add input='{R:1}’ negate=’true’ pattern=’^exemplo/’>< /add>
< action type=’Rewrite’ url=’/exemplo/{R:1}’>< /action>
< /add>
< /conditions>
< /match>
< /rule>
Se você possui vários domínios contratados e deseja que todos os domínios sejam redirecionados para um domínio em específico, mantendo na barra de endereços apenas este, realize a configuração abaixo:
Esta configuração redireciona os endereços ‘exemplo.com’ e ‘exemplo.net’ para ‘exemplo.com.br’
< rule name=’exemplo 4′ stopprocessing=’true’>< /rule>
< match url='(.*)’>< /match>
< action redirecttype=’Permanent’ type=’Redirect’ url=’http://exemplo.com.br/{R:1}’>< /action>
< conditions logicalgrouping=’MatchAny’>< /conditions>
< add input='{HTTP_HOST}’ pattern=’^(www.)?exemplo.com$’>< /add>
< add input='{HTTP_HOST}’ pattern=’^(www.)?exemplo.net$’>< /add>
< /rule>
O módulo de rewrite já se encontra instalado em todos os nossos servidores e é uma funcionalidade exclusiva para Windows 2008/IIS7.
Para mais recursos:
– http://www.iis.net/extensions/URLRewrite
– http://blogs.iis.net/bills/archive/2008/05/31/urlrewrite-module-for-iis7.aspx