Criando URLs amigáveis com ASP.NET

URLs 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.

Por | @le17i Programação
<p>URL&rsquo;s amigaveis s&atilde;o um papel fundamental em qualquer projeto de SEO. Al&eacute;m de serem visualmente belas e confortaveis aos leitores, uma url bem estruturada aumenta o n&iacute;vel de sem&acirc;ntica da p&aacute;gina, o que &eacute; &oacute;timo para indexa&ccedil;&atilde;o.&nbsp;</p> <p>Outro dia precisei configurar a reescrita de url em ASP.NET para fazer um determinado site funcionar com url&rsquo;s amig&aacute;veis. No entanto, percebi que apesar de ser f&aacute;cil, n&atilde;o existe muitos sites em portugu&ecirc;s falando do assunto. Ent&atilde;o, m&atilde;os &agrave; obra!</p> <p>&nbsp;</p> <h2>Criando um projeto ASP.NET no Visual Web Developer</h2> <p>Com o Visual Web Developer Express aberto (estou usando a vers&atilde;o 2008), crie um novo projeto do tipo &ldquo;Empty Web Site&rdquo; e renomeie a pasta do projeto para algo do tipo: &ldquo;reescrita-de-url-asp-net&rdquo;.</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&aacute;gina .aspx e renomeie para index.aspx. Na aba &ldquo;Solution Explorer&rdquo;, procure pelo arquivo index, clique no &ldquo;+&rdquo; para expandir, e depois de dois cliques no arquivo &ldquo;index.aspx.cs&rdquo;.</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>&nbsp;</p> <p>Com o arquivo index.aspx.cs aberto, v&aacute; no met&oacute;do &ldquo;Page_Load&rdquo; e insira o c&oacute;digo:</p> <p><code>//Se a url conter o parâmetro &ldquo;id&rdquo;, 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 &ldquo;name&rdquo;, 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&oacute;s index.aspx, os par&acirc;metro e. A url ficar&aacute; 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&acirc;metros s&atilde;o exibidos na p&aacute;gina.&nbsp;Agora que temos uma url din&acirc;mica funcionando no nosso projeto, vamos a cria&ccedil;&atilde;o do sistema de reescrita de url para poder inserir as&nbsp;<strong>url&rsquo;s amigaveis</strong>.</p> <p>&nbsp;</p> <h2>Reescrita de URL com ASP.NET e Global.asax</h2> <p>Agora v&aacute; novamente na Solution Explorer, clique com bot&atilde;o direito e depois em &ldquo;Add new item&rdquo;. Na janela &ldquo;Add new item&rdquo;, adicione o item &ldquo;Global.asax&rdquo;.</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">&nbsp;</p> <p class="p1">Com o arquivo Global.asax aberto, adicione o seguinte c&oacute;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">&nbsp;</p> <p>Aperte F5 para rodar o projeto, e na url, apague index.aspx e insira produto/tenis/39/. A url ficar&aacute; mais ou menos assim:</p> <p><code>http://localhost:54541/reescrita-de-url-asp-net/produto/tenis/39/</code></p> <p>Pronto. A&nbsp;<strong>reescrita de url no ASP.NET</strong>&nbsp;j&aacute; est&aacute; funcionando. Mas note que se voc&ecirc; digitar, por exemplo, &ldquo;produto/tenis/40/&rdquo;, ir&aacute; retornar erro 404, visto que o RewritePath est&aacute; configurado apenas para a string exata &ldquo;produto/tenis/39/&rdquo;.</p> <p>Para solucionar esse problema, vamos adicionar&nbsp;<strong>Express&otilde;es Regulares com Regex</strong>.</p> <p>&nbsp;</p> <h2>Reescrita de URL com Express&otilde;es Regulares no ASP.NET</h2> <p>Com o arquivo Global.asax aberto, apague o c&oacute;digo que est&aacute; dentro do met&oacute;do Application_BeginRequest e adicione o seguinte c&oacute;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  &ldquo;produto/algum-valor&rdquo;<br />Match matchProductcat = Regex.Match(urlOriginal, "produto/(.*)/", RegexOptions.IgnoreCase);<br /><br />//Expressão regular  para  a url com  &ldquo;produto/algum-valor/outro-valor&rdquo;<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">&nbsp;</p> <p class="p1">Aperte F5 para rodar o projeto, e na url insira &ldquo;produto/camisa/300/&rdquo;, ou &ldquo;produto/cal&ccedil;a/1003/&rdquo; ou &ldquo;produto/celular/2300/&rdquo;.&nbsp;</p> <p class="p1">Com as <strong>express&otilde;es regulares</strong> devidamente configuradas, voc&ecirc; n&atilde;o precisa verificar url por url para redirecionar para a real p&aacute;gina, que no caso &eacute; index.aspx. Basta que a url siga o padr&atilde;o da express&atilde;o regular que foi configurada, que funcionar&aacute; corretamente.</p> <p class="p1"><em>Veja tamb&eacute;m <a rel="nofollow" href="http://www.leandrodias.net/" target="_blank">meu blog</a></em></p>

Mais sobre: asp.net seo urls
Share Tweet
Recomendado
Comentários
Carregar comentários
Destaquesver tudo