Caro(a) Leitor(a), gostaria de mostrar como reescrever a URL do seu site e como escondendo a extensão do arquivo. Essa forma de reescrever URL funciona no IIS 7.0, diferente do IIS 6.0.

Caso queira ver um artigo focado no IIS 6.0, então clique no link abaixo que poderá te ajudar.

- A mágica do ResolveURL - http://www.ecode10.com/artigo/1433/A-magica-do-ResolveURL

- URL Routing com Visual Studio .NET 2010 http://www.ecode10.com/artigo/842/URL-Routing-com-o-Visual-Studio-NET-2010

- URL Indexavel – Reescrever URL de uma forma amigável http://www.ecode10.com/artigo/597/URL-Indexavel-Reescrever-URL-de-uma-forma-amigavel

Os links acima podem te ajudar a indexar melhor o seu site e postes. 

O grande problema hoje em dia é que os servidores foram migrados para a versão IIS 7.0 e com essa versão, do IIS, o processamento de URL ficou diferente. Para isso seria bom reescrever o processamento. Fico bem mais simples do que era antes no IIS 6.0.

Estou utilizando a ferramenta Visual Studio 2012, podem ser utilizadas as versões anteriores sem qualquer problema.  Figura 1.



Figura 1 –Visual Studio 2012

A ferramenta lançada pela Microsoft está preparada para o uso de HTML5 e desenvolvimento para tablet Surface.

O primeiro passo para reescrever a URL de forma mais amigável e escondendo a extensão do arquivo é criar um projeto do tipo “web” figura 2. Basta clicar no link chamado New Project descrito na tela inicial da ferramenta.



Figura 2 – Novo projeto

Depois de clicar no link, outra tela aparece para que escolha o tipo do projeto. Como este documento fala de URL, o tipo de projeto que precisa ser criado é o “web”. Agora você pode criar um projeto do tipo vazio, antes não tinha essa possibilidade, figura 3.



Figura 3 – Escolhendo projeto

Ao lado esquerdo você escolhe a linguagem de programação e do  lado direito o tipo de projeto ou template. O projeto que escolhi foi o ASP.NET Empty Web Application. É o que está exatamente selecionado na figura 3.

O projeto foi criado bem vazio, tenho que adicionar os arquivos como Global.asax e default.aspx. Para adicionar os arquivos, basta clicar com o botão direito em cima do projeto, selecionar o menu Add e depois o sub-menu New Item, figura 4.


Figura 4 – Adicionando nova página

Basta colocar o nome e clicar no botão Add.

É necessário colocar três linhas de código dentro do arquivo Web.config.  Estas linhas faz com que a extensão não precise ser mostrada, listagem 1. Por exemplo: http://www.seusite.com/artigo/titulo

Listagem 1 – Linhas de comando no web.config.
    < system.webserver >< /system.webserver >
        < modules runallmanagedmodulesforallrequests="true" > <  / modules >
   

A listagem 2 mostra como está o arquivo todo de web.config.

Listagem 2 – Todo o web.config
< !--?xml version="1.0"?-- >
< configuration >< /configuration >
    < system.web >< /system.web >
      < compilation debug="true" targetframework="4.5" >< /compilation >
      < httpruntime targetframework="4.5" >< /httpruntime >
   

    < system.webserver >< /system.webserver >
        < modules runallmanagedmodulesforallrequests="true" >< /modules >
   
    

O próximo passo depois de alterar o arquivo web.config, é necessário criar um arquivo Global.asax. É o mesmo procedimento mostrado na figura 4. Depois de criado é necessário alterar um método vazio chamado Application_BeginRequest. Esse método é executado a cada requisição no servidor; isto é; toda requisição passa por este método, listagem 3.

Listagem 3 – Criando método Application_BeginRequest
        protected void Application_BeginRequest ( object sender, EventArgs e ) 
          {  
            Match m = Regex . Match ( Request . Url . LocalPath , @ " ^  /  blog /  (  ? < assunto > . * )  /  (  ? < year > \ d   {   4 }  )  /  ( ? < month > \ d   {  2} )  /  ( ?< day > \ d  {  2 } )  /  (  ? < title >  . *  )  / ? $ " ) ;

            if  ( m . Success ) 
              {  
                Context . Items [ "Title" ]  = m . Groups [ "title" ]  . Value;
                Context . Items [ "Year" ]  = m . Groups [ "year" ]  . Value;
                Context . Items [ "Month" ]  = m . Groups [ "month" ]  . Value;
                Context . Items [ "Day" ]  = m . Groups [ "day" ]  . Value;
                Context . Items [ "Assunto" ]  = m . Groups [ "assunto" ]  . Value;

                HttpContext . Current . RewritePath ( " / default . aspx?id=" + Context . Items [ "Day" ]  . ToString (  )  + "&titulo=" + Context
                     . Items [ "Title" ]  . ToString (  )  + "&assunto=" + Context . Items [ "Assunto" ]  . ToString (  )  ) ;
            }
        }

A primeira linha do método começa usando o Regex.Match, isto quer que você precisa importar a classe System.Text. Ele pega a URL e verifica a existência do /blog mais os outros parâmetros como assunto, ano, mês, dia e título. 

O mesmo nome que você coloca no math é o nome que pode pegar nos grupos, mostrado acima, listagem 3.

Note que o ano possui o  \ d { 4 }, isso quer dizer que precisa ser passado 4 caracteres para o campo ano. Quando você não precisa identificar a quantidade de caracter, basta usar o ponto e asterisco, como mostrado no assunto e title.

Se a URL for bem sucedida, quero dizer, se existir estes parâmetros, o programa pega o grupo de cada uma e armazenar na variável de contexto.

Para finalizar, ele usa o rewritePath indicando a página e os parâmetros necessários para serem passados. 

Se não for passado a URL de acordo com o que ele está esperando, ele não vai usar esse redirecionamento.

Note que no RewritePath estou passando parâmetros para a página default.aspx. Esses parâmetros eu posso pegar com request.params. No load da página default.aspx eu coloquei isto, listagem 4.

Listagem 4 – Load da página
protected void Page_Load ( object sender, EventArgs e ) 
        {

            if  ( Request . Params [ "Titulo" ]  != null ) 
            {
                Response . Write ( "
Titulo: " + Request . Params [ "Titulo" ]  . ToString (  )  ) ;
                Response . Write ( "
Id: " + Request . Params [ "id" ]  . ToString (  )  ) ;
                Response . Write ( "
Assunto: " + Request . Params [ "Assunto" ]  . ToString (  )  ) ;
            }
        }

Quando a página inicia e nenhum parâmetro foi passada, ela não mostra nada, figura 5.


Figura 5 – Página sem nada

Quando coloco os parâmetros obedecendo ao que foi programado, aparecem os dados pegos na tela sem qualquer problema, figura 6.



Figura 6 – Passando os parâmetros

O que é mais interessante ainda é que você pode colocar a extensão que quiser. O IIS vai entender e redirecionar de forma correta, figura 7. Veja que coloquei a extensão .bing no final da URL.



Figura 7 – Mudando a extensão para .bing.

Espero que tenha gostado desse exemplo simples, porém bem funcionando para quando estiver desenvolvendo o site, blog ou sistema. Qualquer dúvida, pode entrar em contato próprio site.

Fonte: Improve DK