<p>URL’s amigaveis são um papel fundamental em qualquer projeto de SEO. Além de serem visualmente belas e confortaveis aos leitores, uma url bem estruturada aumenta o nível de semântica da página, o que é ótimo para indexação. </p> <p>Outro dia precisei configurar a reescrita de url em ASP.NET para fazer um determinado site funcionar com url’s amigáveis. No entanto, percebi que apesar de ser fácil, não existe muitos sites em português falando do assunto. Então, mãos à obra!</p> <p> </p> <h2>Criando um projeto ASP.NET no Visual Web Developer</h2> <p>Com o Visual Web Developer Express aberto (estou usando a versão 2008), crie um novo projeto do tipo “Empty Web Site” e renomeie a pasta do projeto para algo do tipo: “reescrita-de-url-asp-net”.</p> <p><span class="img_editor"><img src="https://www.oficinadanet.com.br/imagens/post/9169/td_1criar-projeto-asp-net.png" alt="" /></span></p> <p>Depois, adicione uma nova página .aspx e renomeie para index.aspx. Na aba “Solution Explorer”, procure pelo arquivo index, clique no “+” para expandir, e depois de dois cliques no arquivo “index.aspx.cs”.</p> <p><span class="img_editor"><img src="https://www.oficinadanet.com.br/imagens/post/9169/2abrir-arquivo-index-aspx-cs.png" alt="" /></span></p> <p> </p> <p>Com o arquivo index.aspx.cs aberto, vá no metódo “Page_Load” e insira o código:</p> <p><code>//Se a url conter o parâmetro “id”, ele escreve o valor do paramêtro na página.<br />if (Request.QueryString["id"] != null)<br />{<br />     Response.Write(Request.QueryString["id"]);<br />}<br /> <br />//Se a url conter o parâmetro “name”, ele escreve o valor do paramêtro na página.<br />if (Request.QueryString["name"] != null)<br />{<br />     Response.Write(Request.QueryString["name"]);<br />}</code></p> <p class="p1">Salve tudo e aperte F5 para rodar o projeto. No navegador (provavelmente o IE), adicione após index.aspx, os parâmetro e. A url ficará mais ou menos assim:</p> <p><code>http://localhost:54541/reescrita-de-url-asp-net/index.aspx?id=40&name=meunome</code></p> <p>Veja que os valores dos parâmetros são exibidos na página. Agora que temos uma url dinâmica funcionando no nosso projeto, vamos a criação do sistema de reescrita de url para poder inserir as <strong>url’s amigaveis</strong>.</p> <p> </p> <h2>Reescrita de URL com ASP.NET e Global.asax</h2> <p>Agora vá novamente na Solution Explorer, clique com botão direito e depois em “Add new item”. Na janela “Add new item”, adicione o item “Global.asax”.</p> <p class="p1"><span class="img_editor"><img src="https://www.oficinadanet.com.br/imagens/post/9169/td_4adicionar-arquivo-global-asax.png" alt="" /></span></p> <p class="p1"> </p> <p class="p1">Com o arquivo Global.asax aberto, adicione o seguinte código:</p> <p class="p1"><code>void Application_BeginRequest(object sender, EventArgs e)<br />{<br />        //pega a url digitada no navegador<br />        string urlOriginal = Request.Url.ToString();<br />      <br />        //verifica o padrão da url<br />        if (urlOriginal.Contains("produto/40/"))<br />        {<br />            //Redireciona para a página real<br />            Context.RewritePath("~/index.aspx?id=" + key);<br />        }<br />        //verifica o padrão da url<br />        else if(urlOriginal.Contains("produto/tenis/39/"))<br />        {<br />            //Redireciona para a página real<br />            Context.RewritePath("~/index.aspx?id=39&name=tenis");<br />        }<br /> }</code></p> <p class="p1"> </p> <p>Aperte F5 para rodar o projeto, e na url, apague index.aspx e insira produto/tenis/39/. A url ficará mais ou menos assim:</p> <p><code>http://localhost:54541/reescrita-de-url-asp-net/produto/tenis/39/</code></p> <p>Pronto. A <strong>reescrita de url no ASP.NET</strong> já está funcionando. Mas note que se você digitar, por exemplo, “produto/tenis/40/”, irá retornar erro 404, visto que o RewritePath está configurado apenas para a string exata “produto/tenis/39/”.</p> <p>Para solucionar esse problema, vamos adicionar <strong>Expressões Regulares com Regex</strong>.</p> <p> </p> <h2>Reescrita de URL com Expressões Regulares no ASP.NET</h2> <p>Com o arquivo Global.asax aberto, apague o código que está dentro do metódo Application_BeginRequest e adicione o seguinte código:</p> <p class="p1"><code>//pega a url digitada no navegador<br />string urlOriginal = Request.Url.ToString();<br />//Expressão regular  para  a url com  “produto/algum-valor”<br />Match matchProductcat = Regex.Match(urlOriginal, "produto/(.*)/", RegexOptions.IgnoreCase);<br /><br />//Expressão regular  para  a url com  “produto/algum-valor/outro-valor”<br />Match matchProduct = Regex.Match(urlOriginal, "produto/(.*)/(.*)/", RegexOptions.IgnoreCase);<br /><br />//Verifica se o padrão da url bate com a expressão regular<br />if (matchProduct.Success)<br />{<br />    //pega o valor do primeiro "(.*)<br />    string key1 = matchProductcat.Groups[1].Value;<br /><br />    //pega o valor do segundo "(.*)<br />    string key2 = matchProductcat.Groups[2].Value;<br /><br />    //Redireciona para a página real<br />    Context.RewritePath("~/index.aspx?id=" + key1 + "&name=" + key2);<br />}<br />//Verifica se o padrão da url bate com a expressão regular<br />else if (matchProductcat.Success)<br />{<br />    //pega o valor do primeiro "(.*)<br />    string key = matchProduct.Groups[1].Value;       <br />    <br />    //Redireciona para a página real<br />    Context.RewritePath("~/index.aspx?id=" + key);<br />}<br />else<br />{<br />    Context.RewritePath("~/index.aspx");<br />}</code></p> <p class="p1"> </p> <p class="p1">Aperte F5 para rodar o projeto, e na url insira “produto/camisa/300/”, ou “produto/calça/1003/” ou “produto/celular/2300/”. </p> <p class="p1">Com as <strong>expressões regulares</strong> devidamente configuradas, você não precisa verificar url por url para redirecionar para a real página, que no caso é index.aspx. Basta que a url siga o padrão da expressão regular que foi configurada, que funcionará corretamente.</p> <p class="p1"><em>Veja também <a rel="nofollow" href="http://www.leandrodias.net/" target="_blank">meu blog</a></em></p>