Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

xanburzum

Isapi Rewrite

Recommended Posts

ISAPI REWRITE um mecanismo de reescrita que modifica a aparência de uma URL da web ,cria regras e extensões que são executadas antes de um servidor web mostrar o conteúdo solicitado por um usuário. São controladas por eventos do servidor não por requisições do cliente. Aqui algumas ótimas referencias de estudo sobre o assunto, http://www.isapirewrite.com/,'>http://www.isapirewrite.com/, http://httpd.apache.org/docs/1.3/mod/mod_rewrite.html.

 

Podemos por exemplo, mudar uma URL assim:

 

http://exemplo.com.br/teste/index.asp?titulo= titulo_pagina

 

Para:

 

http:// exemplo.com.br/ teste / titulo_pagina

 

Um Fórum pode ter uma URL que codifica as datas de cada entrada:

 

http://www.site.com.br/'>http://www.site.com.br/Forum/Posts.asp?Dia=11&Mes=04&Ano=2011'>http://www.site.com.br/'>http://www.site.com.br/Forum/Posts.asp?Dia=11&Mes=04&Ano=2011

 

 

Ela pode ser alterada como esta:

 

http://www. site.com.br/Forum /11/04/2011/

 

que também permite ao usuário alterar a URL para ver todos os lançamentos disponíveis em abril, basta remover a codificação de texto no dia '11 ', como se a navegação fosse "para cima" de um diretório:

 

http://www. site.com.br/Forum/04/2011/

Podemos também utilizar para proteção de hotlink, no seu arquivo httpd.ini adicione essas linhas:

 

# proteção hotlink
RewriteCond Host: (.+)
RewriteCond Referer: (?!http://1.*).*
RewriteRule .*.(?:gif|jpg|png) /block.gif [i,O]

 

Para esta expressão protegemos todos os formatos de arquivos com extensão gif, jpg e png. Você pode proteger outros formatos adicionando-os na última linha do código.

 

Instalando

 

Para a instalação necessitamos ter controle total de um servidor local ou próprio se a instalação for em um servidor compartilhado, utilize o painel de controle, geralmente por um botão de comando ativar/desativar, ou então por uma solicitação no helpdesk.

Criando regras para as urls amigáveis.

 

Vamos criar regras básicas, para facilitar o entendimento e absorção do material e neste caso, vamos criar uma regra para cada arquivo.

O site que vamos utilizar como exemplo para implementar as URL’s amigáveis tem as seguintes páginas: home.asp, empresa.asp, produtos.asp, contato.asp

 

A pagina de home é uma pagina dinâmica, que recebe até 3 parâmetros: id do produto, categoria e quantidade (em caso de paginação). Ou seja, a pagina de noticias é acessada da seguinte maneira:

 

HTTP://www.site.com.br/home.asp?categoria=15&idproduto=23&quantidade=3

 

Logo, a regra deverá ser:

 

RewriteRule ^/preco/([a-zA-Z0-9_-]+)/([a-zA-Z0-9_-]+)-([0-9]+),([0-9]+),([0-9]+)/?(.html)?$ /home.asp? categoria =$3&idproduto=$4&quantidade=$5 [i,L]

 

Esta é regra a conversão do link acima, que retornará o seguinte endereço:

 

HTTP://www.site.com.br/home/informatica/mouse-otico-15,23,3.html

 

Para as demais paginas, que não recebem parâmetros as regras ficarão mais simples, veja:


RewriteRule  ^/default/?([a-zA-Z0-9_-]+)?(.html)?$ /default.asp [i,L]

RewriteRule  ^/quemsomos/?([a-zA-Z0-9_-]+)?(.html)?$ /empresa.asp [i,L]

RewriteRule  ^/servicos/?([a-zA-Z0-9_-]+)?(.html)?$ /produtos.asp [i,L]

RewriteRule  ^/contato/?([a-zA-Z0-9_-]+)?(.html)?$ /contato.asp [i,L]

 

Modificando os links internos

 

Depois que as regras foram mapeadas e concluídas, e todas paginas já estão funcionando com a utilização do ISAPI REWRITE, chega a hora então e apontar os links internos do site para a novo formato do link. Vamos efetuar uma busca no site por todas as ocorrências da tag “<a>…</a>”. Localize e abra todos os arquivos que contenha a sintax “<a href=”.

 

Com os links já localizados, faça a modificação do código tomado como exemplo. Troque:

 

<a href="home.asp?c=15&Categoria=23&quantidade=3">Titulo Notícia</a>

 

Por:

 

<a href="<%=URLamigavel("home.asp?v=15&idCategoria=23& quantidade =3","nome da Categoria","Titulo Noticia")%>">Titulo Notícia</a>

 

Para que o site permaneça funcionando, basta criar uma função que retorne o mesmo valor. Assim também é possível manter o site funcionando caso ocorre algum problema com o servidor ou com a própria aplicação.


Function  URLamigavel(param)

URLamigavel = param

End Function

 

Função para converter url amigável

 

Precisaremos então de uma função que converta os links atuais, para os novos formatos de links. Na sua biblioteca de funções cria as seguinte funções:

 





<pre>Function urlAmigavel(pag, ByVal cat, ByVal tit)




dim URL, arquivo, parametros, sField, sValue, valor




URL = "http://www.site.com.br/"




If InStr(pag, ".asp" ) > 0 Then




arquivo = Left( pag, ( InStr(pag, ".asp" ) -1)  )




If InStr(pag, "?" ) Then




parametros = Split( Right( pag , Len(pag) -  InStr(pag, "?" ) ) , "&")




For j = 0 To UBound( parametros )




sField = left ( parametros(j) , InStr( parametros(j) , "=") -1 )




sValue = Right( parametros(j) , Len(parametros(j)) -  InStr( parametros(j) , "=") )




if valor = "" Then valor = sValue Else valor = valor &","& sValue End If




Next




End if




End if




If tit <> "" then




tit = "/"& FormataTitulo( tit )




If cat <> "" then




cat = "/"& FormataTitulo( cat )




End if




Else




tit = "/"




End if




If valor <> "" Then    valor = "-" & valor&".html"    End If




urlAmigavel = URL & arquivo & cat & tit & valor




End Function




'---------------------------------------------------------------




Function ereg_replace(ByVal ereg_vetor, ByVal repl, ByVal valor)









<pre> ereg_vetorV = Split(ereg_vetor, "-")




If ubound(ereg_vetorV) > 0 Then




charName   = Split(ereg_vetorV(0),"|")




For i_ereg = 0 To UBound(charName)




valor = Replace(valor, charName(i_ereg), repl)




Next




If UBound(ereg_vetorV) >= 1 then




charID     = Split(ereg_vetorV(1),"|")




If Join(charID) <> "" then




For i_ereg = 0 To UBound(charID)




valor = Replace(valor, "" & charID(i_ereg) & ";", repl)




Next




End if




End if




End If




ereg_replace = valor




End Function




Function FormataTitulo( ByVal s )




s = Trim(s)




s = LCase(s)




s = ereg_replace("á|à|â|ã|ä|ª-@|224|225|226|227|228|229","a",s)




s = ereg_replace("é|è|ê|ë-232|233|234|235","e",s)




s = ereg_replace("í|ì|î|ï-236|237|238|239","i",s)




s = ereg_replace("ó|ò|ô|õ|º|ö-242|243|244|245|246|186","o",s)




s = ereg_replace("ú|ù|û|ü-249|250|251|252","u",s)




s = ereg_replace("ç-231","c",s)




s = ereg_replace("ñ","n",s)




s = replace(s , "-", "")




s = replace(s , "&", "")




s = replace(s , " ", "-")




s = replace(s , ",", "")




s = replace(s , "?", "")




s = replace(s , ":", "")




s = replace(s , "/", "")




s = replace(s , ".", "")




s = replace(s , "'", "")




s = replace(s , "´", "")




s = replace(s , """, "")




s = replace(s , "$", "s")




s = replace(s , "!", "")




s = replace(s , "%", "")

 FormataTitulo = s

End Function</pre>

 

Abaixo alguns metacaracteres, com o seu significado entre parêntesis a seguir:

 

• . (qualquer caractere)

• * (zero ou mais precedentes)

• + (uma ou mais precedentes)

• {} (mínimo ao máximo quantificador)

• ? (modificador ungreedy)

• ! (no início da string significa "padrão negativo ")

• ^ (início da seqüência de caracteres, ou "negativo" se no início de uma série)

• $ (final da string)

• [] (corresponde a nenhum conteúdo)

• - (intervalo se usado entre colchetes)

• () (grupo, de volta referenciado)

• | (alternativa, ou)

• \ (o próprio caractere de escape)

 

Usando expressões regulares, é possível pesquisar por todos os tipos de padrões de URLs e reescrevê-los quando eles coincidem. Hora para um outro exemplo - que queríamos antes de ser capaz de identificar essa URL e reescrevê-lo:

 

http://www.site.com.br/'>http://www.site.com.br/ araras/brasil-azul/

 

Vamos fazer o servidor interpretar isso como o seguinte, mas para todos os produtos:

 

http://www. site.com.br /produto_por_nome.asp?produto_nome= brasil-azul

 

E podemos fazer isso de forma relativamente simples, com a seguinte regra:

 

RewriteRule ^ araras/([A-Za-z0-9-]+)/?$

produto_por_nome.asp?produto_nome =$1 [NC,L] # Processo araras

 

Com essa regra, qualquer URL que começa com " araras ", seguido por uma barra (araras /), então um ou mais (+) em qualquer combinação de letras, números e hífens ([A-Za-z0-9]) ( Observe o hífen no final da seleção de caracteres entre colchetes - que deve ser adicionado lá para ser tratado, literalmente, ao invés de como um separador de intervalo),nome do produto de referência entre parênteses, com $1 na substituição.

 

Ppodemos fazer ainda mais genérica, se queremos, de modo que não importa o diretório de um produto, assim:

 

RewriteRule ^ [A-Za-z-]+/([ produto_por_nome.asp A-Za-z0-9-]+)/?$? produto_nome = $ 1 [NC, L] # Processa todos os produtos

 

Como você pode ver, temos substituído " araras" com um padrão que combina letras e hífens. Essa regra será para diretório araras ou qualquer outro diretório cujo nome é composto de pelo menos uma ou mais letras e hífens.

 

Flags

 

Flags são adicionados ao final de uma regra como interpretar e lidar com a regra. Elas podem ser usadas para tratar a regra como case-sensitive, para parar regras de processamento, e os one matches atual, ou uma variedade de outras opções. Eles são separados por vírgula, e entre colchetes. Aqui está uma lista das Flags, com seus significados (esta informação é incluído no cheat sheet).

 

• C (acorrentado com a regra seguinte)

• CO=cookie (set cookie especificado)

• E=var:value (var conjunto variável de ambiente para o valor)

• F (forbidden [proibido] - envia um cabeçalho de 403 para o usuário)

• G (gone [se foi] - não existe mais)

• H=handler (conjunto manipulador)

• L (last - deixar de regras de processamento)

• N (next - continua regras de processamento)

• NC (case insensitive)

• NE (n ão escapar caracteres especiais na URL de saída)

• NS (ignorar esta regra se o pedido é um SUBPEDIDO)

• P (proxy - ou seja, o Apache deve pegar o conteúdo remoto especificado na seção de substituição e devolvê-lo)

• PT (passar - use quando URLs com os manipuladores de processamento adicional, por exemplo, mod_alias)

• R (temporária redirecionar para nova URL)

• R=301 (redirecionamento permanente para nova URL)

• QSA (query string de pedido de URL substituído)

• S=x (ignorar as regras ao lado x)

• T=mime-type (força especificada tipo mime)

 

Exceções e casos especiais

 

As condições podem ser testadas em algumas maneiras diferentes ,elas não precisam ser tratadas como padrões de expressões regulares, embora esta seja a maneira mais comum de serem usadas. Aqui estão as várias maneiras reescrever conditons pode ser processado:

 

• <Pattern (seqüência de teste é inferior ao padrão)

• >Pattern (seqüência de teste é maior do padrão)

• =Pattern (seqüência de teste é igual ao padrão)

• -d (seqüência de teste é um diretório válido)

• -f (seqüência de teste é um arquivo válido)

• -s (seqüência de teste é um arquivo válido com tamanho maior que zer)

• -l (eqüência de teste é um link simbólico)

• -F (seqüência de teste é um arquivo válido e acessível (via SUBPEDIDO))

• -U (seqüência de teste é uma URL válida, e acessíveis (via SUBPEDIDO))

 

Variáveis de Servidor

 

Variáveis do servidor são uma seleção de itens que você pode testar quando estiver a escrever reescrever condições. Isto permite-lhe aplicar as regras com base em todos os tipos de parâmetros da requisição, incluindo os identificadores navegador, URL de referência ou uma infinidade de outras seqüências. As variáveis são do seguinte formato:

% {variable_name}

 

HTTP Headers

o HTTP_USER_AGENT

o HTTP_REFERER

o HTTP_COOKIE

o HTTP_FORWARDED

o HTTP_HOST

o HTTP_PROXY_CONNECTION

o HTTP_ACCEPT

• Variáveis Connection

o REMOTE_ADDR

o REMOTE_HOST

o REMOTE_USER

o REMOTE_IDENT

o REQUEST_METHOD

o SCRIPT_FILENAME

o PATH_INFO

o QUERY_STRING

o AUTH_TYPE

• Server Variables

o DOCUMENT_ROOT

o SERVER_ADMIN

o SERVER_NAME

o SERVER_ADDR

o SERVER_PORT

o SERVER_PROTOCOL

o SERVER_SOFTWARE

• Data e Hora

o TIME_YEAR

o TIME_MON

o TIME_DAY

o TIME_HOUR

o TIME_MIN

o TIME_SEC

o TIME_WDAY

o TIME

• Itens Especiais

o API_VERSION

o THE_REQUEST

o REQUEST_URI

o REQUEST_FILENAME

o IS_SUBREQ

 

Exemplo de regras

 

Para redirecionar um domínio antigo para um novo domínio:

 

RewriteCond %{HTTP_HOST} velho_dominio\.com [NC] RewriteRule ^(.*)$ http://www.novo_dominio.com /$1 [L,R=301]

 

 

Para redirecionar todas as solicitações faltando "www" (sim www):

 

RewriteCond %{HTTP_HOST} ^dominio\.com [NC] RewriteRule ^(.*)$ http://www.dominio.com/$1 [L,R=301]

 

 

Para redirecionar todas as solicitações com "www" (sem www):

 

RewriteCond %{HTTP_HOST} ^www\.dominio\.com [NC] RewriteRule ^(.*)$ http:// dominio.com/$1 [L,R=301]

 

 

Redirecionar página antiga para a nova página:

 

RewriteRule ^old-url\.htm$ http://www.dominio.com/nova-url.htm [NC,R=301,L]

 

 

Para ter os usuários do site assim www.meusite.com.br/usuario, sem o default.asp?usr=NOME, só pelo /usuário:

 

RewriteEngine On

 

RewriteCond %{SCRIPT_FILENAME} -f [OR]

RewriteCond %{SCRIPT_FILENAME} -d

RewriteRule .* - [L]

RewriteRule ^([^.]+)$ pagina.asp\?usuario=$1

 

 

 

Fonte: vários sites e URL´s citadas no próprio post.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Um bom artigos, mas, gostaria saber de quem é a fonte? qual o autor do artigo?

 

EDITADO

 

Opsssss, agora que eu vi em minisculo: Fonte: vários sites e URL´s citadas no próprio post.

 

Não entendo por que colocar a fonte do artigo tão em minúsculo, masssss ok, queria saber a fonte para estudar mais ou talvez conhecer novos métodos rewrite.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tenho vários artigos, textos e partes de códigos, juntando tudo saiu uma boa referencia.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.