Ir para conteúdo

POWERED BY:

Arquivado

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

Magnata007

Isapi Rewrite 3 no ASP Clássico

Recommended Posts

Boa noite,

estou tentando criar url amigaveis em meus sites, e estou tentando trabalhar com o Isapi Rewrite 3.

Bem... fui estudando, olhando alguns foruns, e consegui criar configurar o arquivo .htaccess, faze-lo funcionar em paginas simples, o meu problemas é quando vou adicionar URL amigaveis aos links internos,

 

por exemplo,

 

MINHAS FUNÇÕES PARA CONVERTER A URL AMIGAVEL SÃO:

Function  URLamigavel(param)
URLamigavel = param
End Function
'-------------------------------------------------------'
Function urlAmigavel(pag, ByVal cat, ByVal tit)
dim URL, arquivo, parametros, sField, sValue, valor
URL = "http://www.meusite.com.br/site2/"
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)
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

 

URL NA PÁGINA COM A FUNÇÃO

<a href="<%=URLamigavel("noticias/noticia.asp?noticia=2&id="&str_cod_not, "teste01", "teste02")%>">

 

URL NA PÁGINA SEM A FUNÇÃO

<a href="noticias/noticia.asp?noticia=2&id=<%=str_cod_not%>">

 

Sem a função funciona normalmente, porém quando coloco a função ele diz que a página não existe.

Alguem pode me ajudar?

Travei neste problema!

 

Mto obrigado!

 

Abs

Compartilhar este post


Link para o post
Compartilhar em outros sites

Poste as urls geradas por cada link, com a função URLamigavel() e sem ela.

 

To achando que sua função é que está com problema.

 

Olá David Borges,

 

Bem... com a URL amigavel ele gera essa:

http://www.meusite.com.br/site2/noticias/noticia/teste01/teste02-2,9.html

 

E sem ele gera essa:

http://www.meusite.com.br/site2/noticias/noticia.asp?noticia=2&id=9

 

Esse segundo funciona numa boa.

Compartilhar este post


Link para o post
Compartilhar em outros sites

oloha esse artigo vê se ajuda.

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/Forum/Posts.asp?Dia=11&Mes=04&Ano=2012'>http://www.site.com.br/Forum/Posts.asp?Dia=11&Mes=04&Ano=2012

Ela pode ser alterada como esta:

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

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/2012/

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

Podemos 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 é 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]

Compartilhar este post


Link para o post
Compartilhar em outros sites

oloha esse artigo vê se ajuda.

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/Forum/Posts.asp?Dia=11&Mes=04&Ano=2012'>http://www.site.com.br/Forum/Posts.asp?Dia=11&Mes=04&Ano=2012

Ela pode ser alterada como esta:

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

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/2012/

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

Podemos 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 é 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]

 

Olá Xanburzum,

 

Obrigado pela força, mas é que eu já tinha visto esse artigo, eu me basiei nele e em alguns outros parecidos para montar meu código, tanto que minha função é bem parecida com a que é citada no artigo, e é ai que está o problema.

Não consegui fazer está função URLAMIGAVEL funcionar.

 

Aproveitando que você postou o artigo todo aqui, o meu problema está ali em "Modificando os links internos", quando mudo minha URL, não funciona, ele não encontra a página.

 

Tem alguma dica?

 

Vlw

Compartilhar este post


Link para o post
Compartilhar em outros sites

cara, sua url gerada está com uma vírgula?

 

tenho o isapi aqui fiz o teste e vírgula pode ser o problema, se bem que eu ACHO que já vírgula em outras urls.

 

bom, poste a regra que você está usando no .htacess.

Compartilhar este post


Link para o post
Compartilhar em outros sites

ele esta gerando algum erro ?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Estou com o mesmo problema... ele não encontra a URL gerada pela função!

 

A função é a mesma

 

<a  href="<%=URLamigavel("Principal.asp?v=15&idCategoria=23& quantidade =3","Categoria","Titulo")%>">Principal</a>

 

HTTP Error 404.0 - Not Found

The resource you are looking for has been removed, had its name changed, or is temporarily unavailable.

 

Requested URL http://www.site.com.br:80/webcontrol/Principal/categoria/noticia-15,23,3.html

Compartilhar este post


Link para o post
Compartilhar em outros sites

porque você não executa uma RewriteRule direto no server ?

Compartilhar este post


Link para o post
Compartilhar em outros sites

porque você não executa uma RewriteRule direto no server ?

 

Estou hospedado na LocaWeb sabe se tem como? ou poderia me dar um exemplo?

 

Desde já Obrigado!

Compartilhar este post


Link para o post
Compartilhar em outros sites

sim, a locaweb suporta, ele tem até alguns modelos

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.