Bom tarde computêros…

  • Introdução

Este post é uma continuação do URL Rewriting / URL Amigáveis no WordPress com IIS porém a solução dele era a utilização de uma página em php, que fazia o rewriting, porém em alguns amibientes isso não é possível (como aconteceu comigo ao mudar para a Locaweb), qual a solução adota por vários provedores? A utilização de filtros ISAPI, esses filtros terão basicamente duas coisas, o domínio a qual queremos fazer o rewriting e uma regra (que é o rewriting em si), para isso é necessário um conhecimento intermediário sobre Expressões Regulares, caso não conheça eu recomendo que antes de mais nada aprenda sobre expressões regulares para depois tentar o url rewriting, não é nada de outro mundo, mas requer uma certa atenção…

  • Expressões Regulares

Por enquanto não vou falar muito sobre expressões regulares, mas deixo alguns links bem interessantes até para quem já conhece o mundo das expressões regulares:

Expressões Regulares na Wikipedia

Portal Brasileiro de Expressões Regulares

Livro Expressões Regulares – Uma abordagem divertida, autor: Aurélio Marinho Jargas (eu tenho e recomendo que comprem!)

Versão online do livro Expressões Regulares – Uma abordagem divertida (mesmo tendo ela online, espero que comprem já que estaremos contribuindo com o grande autorAurélio Marinho Jargas)

Testador de Expressões Regulares

  • Filtros ISAPI, o que são?

A definição da Microsoft para filtros ISAPI é essa:

Os filtros ISAPI são programas que respondem quando um servidor Web recebe uma solicitação HTTP. No entanto, ao contrário das extensões ISAPI, os filtros ISAPI são sempre executados no processo do servidor. Eles são diferentes dos aplicativos porque são controlados por eventos do servidor Web e não por uma solicitação do cliente. Você pode associar um filtro ISAPI a um determinado evento do servidor Web; dessa forma, o filtro é notificado toda vez que o evento associado ocorre. Por exemplo, um filtro poderia ser notificado quando um evento de leitura ou gravação ocorresse e, em seguida, criptografar os dados não processados a serem retornados ao cliente.

  • Começando a entender o httpd.ini

Vou abordar mais a configuração do httpd.ini, portanto para informações técnicas de como instalar e configurar o filtro ISAPI Rewrite vou deixar por aqui alguns links úteis… (mas no final ok?)

A Locaweb hospeda os sites de uma maneira diferente, temos um site principal e podemos adicionar alguns domínios adicionais (dependendo do plano), esses domínios adicionais são criados em subdiretorios  dentro da raíz, e através do url rewriting ele interpreta como um novo site… bacana neh?

De início sim, mas e pra aprender como arrumar o rewriting, rsrrss…

Segue um exemplo de um arquivo original do httpd.ini

[ISAPI_Rewrite]

#Configuração para o site1
RewriteCond Host: (?:www\.)?site1\.com\.br
RewriteRule (.*) /site1$1 [I,L]

#Configuração para o site2
RewriteCond Host: (?:www\.)?site2\.com\.br
RewriteRule (.*) /site2$1 [I,L]

Ou seja, um site principal (site1) e um domínio adicional (site2)…

O maior truque para aplicar o Rewrite é a linha que indica a qual domínio (ou subdomínio) estamos nos referindo, que no caso é aplicada pela linha “RewriteCond Host: ” e qual a regra que queremos definir a este domínio, indicado pela linha RewriteRule

  • RewriteCond Host: (domínio ou subdomínio)

Essa linha nunca mudará, permanecerá sempre a mesma, utilizamos ela sempre que queremos indicar para qual host estamos definindo a regra que virá abaixo dela, pela linha RewriteRule…

  • RewriteRule

A parte mais importante é entender esse comando…

RewriteRule endereco_amigavel endereco_real

Ela irá trabalhar de acordo com as regras que você definir para ela, por exemplo,quando o usuário tentar acessar a página meusite.com.br/computeros, redirecione ele para a página meusite.com.br/artigo.asp?nome=computero.

É basicamente isso, a URL que o usuário acessa, e a URL que ele será redirecionado… sempre utilizando expressões regulares!!!

  • Exemplo:

vamos dar um exemplo bem legal… no wordpress temos  como visualizar os artigos por ano, por mes, por dia… vamos ver como funcionária um artigo dia…

Temos que conhecer qual a regra que ele acessará e pra onde devemos redirecionar…

Acessando todos os artigos do blog computero do dia 30/05/2009

http://blog.computero.com.br/2009/05/30/

Já sabemos que quando clicamos nele, ele exibirá os artigos da data desejada, mas qual será realmente a página que faz isso? para saber isso, temos que ir na administração do blog, Menu de configurações/Links permanentes e escolher a opção padrão…

Fazendo isso ao navegarmos pelo site e trará os posts do dia 30 com o seguinte endereço:

http://blog.computero.com.br/index.php?year=2009&monthnum=5&day=30

Acho que agora conseguimos encontrar um padrão, repare que no link amigável passamos 2009/05/30, que é exatamente os valores que passamos como paramêtros no link real…

Que tal criarmos uma regra para isso? vamos tentar

RewriteCond Host: (?:www\.)?blog\.computero\.com\.br
RewriteRule /([0-9]{4})/([0-9]{1,2})/([0-9]{1,2})/ /blog.computero.com.br/index.php?year=$1&monthnum=$2&day=$3 [I,L]

O host é o endereço do blog… sem segredos…
e a regra tratará exatamente o padrão encontrado /ano/mes/dia/ – /([0-9]{4})/([0-9]{1,2})/([0-9]{1,2})/
([0-9]{4}) – dígitos de 0-9, repetidos quatro vezes, ou seja, o padrão para indicar um ano de 4 digítos
([0-9]{1,2}) – a mesma coisa do anterios, mas desta vez, permitindo um ou dois digitos
([0-9]{1,2}) – mesma coisa que o anterior
as barras /, indicam a separação do link, exemplo /2009/05/30/

depois há um espaço em branco

e depois /blog.computero.com.br/index.php?year=$1&monthnum=$2day=$3 [I,L]
que quer dizer, se a regra anterior for válida, redireciona o usuário para a página a seguir… que é o endereço real substituído os numeros por “retrovisores”, eu num disse que era importante as expressões regulares? Veja aqui…

Agora é com vocês, vou deixar o meu httpd.ini de referência…

  • http.ini computêro
#
# BLOG COMPUTERO
#
RewriteCond Host: (?:www\.)?blog\.computero\.com\.br
RewriteRule (?=/blog.computero.com.br/)(.*) $1 [I,L]
#
RewriteCond Host: (?:www\.)?blog\.computero\.com\.br
RewriteRule /computero/ /blog.computero.com.br/index.php?page_id=11 [I,L]
RewriteCond Host: (?:www\.)?blog\.computero\.com\.br
RewriteRule /sobre/ /blog.computero.com.br/index.php?page_id=2 [I,L]
RewriteCond Host: (?:www\.)?blog\.computero\.com\.br
RewriteRule /wp-(.*)/ /blog.computero.com.br/wp-$1/index.php [I,L]
RewriteCond Host: (?:www\.)?blog\.computero\.com\.br
RewriteRule /comments/feeds/ /blog.computero.com.br/index.php?feed=comments-rss2
RewriteCond Host: (?:www\.)?blog\.computero\.com\.br
RewriteRule /([\w-]+)/feed/ /blog.computero.com.br/index.php?feed=rss2&name=$1 [I,L]
RewriteCond Host: (?:www\.)?blog\.computero\.com\.br
RewriteRule /([\w-]+)/trackback/ /blog.computero.com.br/wp-trackback.php?name=$1 [I,L]
RewriteCond Host: (?:www\.)?blog\.computero\.com\.br
RewriteRule /([\w-]+)/ /blog.computero.com.br/index.php?name=$1 [I,L]
RewriteCond Host: (?:www\.)?blog\.computero\.com\.br
RewriteRule /categoria/([\w-]+)/([\w-]+)/ /blog.computero.com.br/index.php?category_name=$2 [I,L]
RewriteCond Host: (?:www\.)?blog\.computero\.com\.br
RewriteRule /categoria/([\w-]+)/ /blog.computero.com.br/index.php?category_name=$1 [I,L]
RewriteCond Host: (?:www\.)?blog\.computero\.com\.br
RewriteRule /tags/([\w-]+)/ /blog.computero.com.br/index.php?tag=$1 [I,L]
RewriteCond Host: (?:www\.)?blog\.computero\.com\.br
RewriteRule /([0-9]{4})/ /blog.computero.com.br/index.php?year=$1 [I,L]
RewriteCond Host: (?:www\.)?blog\.computero\.com\.br
RewriteRule /([0-9]{4})/([0-9]{1,2})/ /blog.computero.com.br/index.php?year=$1&monthnum=$2 [I,L]
RewriteCond Host: (?:www\.)?blog\.computero\.com\.br
RewriteRule /([0-9]{4})/([0-9]{1,2})/([0-9]{1,2})/ /blog.computero.com.br/index.php?year=$1&monthnum=$2&day=$3 [I,L]
RewriteCond Host: (?:www\.)?blog\.computero\.com\.br
RewriteRule /page/([0-9]+)/ /blog.computero.com.br/index.php?paged=$1 [I,L]
#

Links Úteis:

Site do fabricante

Manual do componente

É isso aí computêros, qualquer dúvida, comentem que tentamos ajudar…

=]