Desenvolvimento

20 set, 2012

Reescrevendo URL e escondendo extensão

Publicidade

Caro leitor, no artigo de hoje eu vou mostrar como reescrever a URL do seu site e como esconder a extensão do arquivo. Essa forma de reescrever URL funciona no IIS 7.0, diferente do IIS 6.0.

Os links acima podem te ajudar a indexar melhor o seu site e os seus artigos:

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. Ficou 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 –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”. 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 – Escolhendo projeto

Do lado esquerdo da tela 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 o Global.asax e o 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 – 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 fazem com que a extensão não precise ser mostrada. Por exemplo: http://www.seusite.com/artigo/titulo

  • Listagem 1 – Linhas de comando no web.config.
  • Listagem 2 – Todo o web.config: a listagem 2 mostra como está o arquivo todo de web.config.

O próximo passo depois de alterar o arquivo web.config é 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 – Criando método Application_BeginRequest
protected void Application_BeginRequest(object sender, EventArgs e)
{
Match m = Regex.Match(Request.Url.LocalPath, @"^/blog/(?.*)/(?\d{4})/(?\d{2})/(?\d{2})/(?.*)/?$");

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 site, 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, na listagem 3.

Note que o ano possui o \d{4}, isso quer dizer que precisa ter passado quatro caracteres para o campo ano. Quando você não precisar identificar a quantidade de caracteres, 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 passada 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 – 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 inicial for passada, mas nenhum parâmetro for, ela não mostra nada:


Figura 5 – Página sem nada

Quando coloco os parâmetros obedecendo ao que foi programado, aparecem os dados retirados da tela:


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, mas que funciona bem para quando estiver desenvolvendo um site, blog ou sistema. Qualquer dúvida, deixe seu comentário.

Fonte: Improve DK