ISAPI REWRITE com ASP clássico 3

Este artigo tem como objetivo explicar como implementar URL’s amigáveis utilizando ISAPI REWRITE e ASP clássico 3.0.
Os principais motores de busca da atualidade estão dando muita importância a semântica da nomenclatura das paginas na internet. Podemos perceber que não vemos mais caracteres como id=234 ou cod=312&pag=1 em endereços de sites, que se transformaram em algo do tipo /noticia/123/o-homem-chega-a-lua. Falando resumidamente, podemos chamar esta prática de URL’s amigáveis. Aqui temos informações mais detalhadas.
Hoje já temos disponíveis na internet muito conteúdo sobre o assunto, em várias plataformas como PHP, .NET, JAVA mas muito pouco conteúdo que aborde o ASP clássico 3.0.
Meu objetivo é explicar em um processo completo como transformar seu site que utiliza URL’s convencionais em amigáveis.

O que é ISAPI REWRITE.

São extensões que são executadas em processos do servidor Web. São controladas por eventos do servidor não por requisições do cliente. Na prática, são regras que são executadas antes de um servidor web mostrar o conteúdo solicitado por um usuário.
Para que nossa tarefa seja cumprida com eficiência, não é necessário ter domínio sobre os filtros ISAPI REWRITE, porém é muito importante ter conhecimento sobre eles, para saber como, quando, e porque utilizar. Além disto se for necessário cumprir alguma tarefa mais complexa tais conhecimentos farão muita falta. Como este não é o assunto principal do artigo, deixo com os leitores ótimas referencias de estudo sobre o assunto, que podem ser encontradas em http://www.isapirewrite.com/, http://httpd.apache.org/docs/1.3/mod/mod_rewrite.html, e http://en.wikipedia.org/wiki/Rewrite_engine.

Instalação do ISAPI REWRITE

A instalação depende muito do ambiente em que a solução será implementada. Se a instalação for em um servidor local ou próprio, onde temos controle total então podemos instalar seguindo estes passos. Se a instalação for em um servidor compartilhado, então tudo deve ser feito via painel de controle, geralmente por um botão de comando ativar/desativar, ou então por uma solicitação no helpdesk.

Testando o ISAPI REWRITE

O primeiro teste além de certificar o funcionamento do filtro ISAPI, também garante a segurança das regras desenvolvidas para o domínio.

Versão 2.0 Digite em seu navegador: HTTP://www.seudominio.com.br/httpd.ini
Versão 3.0 Digite em seu navegador: http://www.seudominio.com.br/.htaccess

Sucesso: Seu navegador retornou uma mensagem como “Ops! Este link parece estar corrompido” ou “Não é possível localizar a página da Web”.

Falha: Seu navegador exibiu o conteúdo do arquivo ou forneceu opção para download.

Agora vamos para o próximo teste. Para testar os filtros em funcionamento, podemos utilizar uma regra simples, de apenas uma linha. Deixe seu arquivo como abaixo:

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

Em seguida digite em seu navegador: HTTP://www.seudominio.com.br/default/

Sucesso: Seu navegador retornará a página default com todo seu conteúdo

Falha: Seu navegador retornará mensagens como “Não é possível localizar a página da Web”. Verifique a instalação do filtro em seu servidor.

Criando regras para as urls amigáveis.

Este artigo tem objetivo facultativo, e se você chegou até aqui, presumo que seja iniciante com a utilização de ISAPI_REWRITE. Por isto, 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 a seguinte estrutura:

|     noticias.asp     |     quemsomos.asp     |     servicos.asp     |     contato.asp     |

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

HTTP://www.seudominio.com.br/noticia.asp?idNoticia=15&idCategoria=23&Pagina=3

Logo, a regra deverá ser:

RewriteRule   ^/noticia/([a-zA-Z0-9_-]+)/([a-zA-Z0-9_-]+)-([0-9]+),([0-9]+),([0-9]+)/?(.html)?$  /noticia.asp?idNoticia=$3&idCategoria=$4&Pagina=$5 [I,L]

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

http://www.seudominio.com.br/noticia/esportes/pele-e-o-rei-do-futebol-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)?$ /quemsomos.asp [I,L]
RewriteRule  ^/servicos/?([a-zA-Z0-9_-]+)?(.html)?$ /servicos.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.
Utilizando sua IDE de desenvolvimento será necessário efetuar uma busca em seu 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:

&lt;a href=&quot;noticia.asp?idNoticia=15&amp;idCategoria=23&amp;Pagina=3&quot;&gt;Titulo Notícia&lt;/a&gt;

Por:

&lt;a  href=&quot;&lt;%=URLamigavel(&quot;noticia.asp?idNoticia=15&amp;idCategoria=23&amp;Pagina=3&quot;,&quot;nome  da Categoria&quot;,&quot;Titulo Noticia&quot;)%&gt;&quot;&gt;Titulo Notícia&lt;/a&gt;

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:

&lt;pre&gt;Function urlAmigavel(pag, ByVal cat, ByVal tit)
 dim URL, arquivo, parametros, sField, sValue, valor
 URL = &quot;http://www.site.com.br/&quot;
 If InStr(pag, &quot;.asp&quot; ) &gt; 0 Then
 arquivo = Left( pag, ( InStr(pag, &quot;.asp&quot; ) -1)  )
 If InStr(pag, &quot;?&quot; ) Then
 parametros = Split( Right( pag , Len(pag) -  InStr(pag, &quot;?&quot; ) ) , &quot;&amp;&quot;)
 For j = 0 To UBound( parametros )
 sField = left ( parametros(j) , InStr( parametros(j) , &quot;=&quot;) -1 )
 sValue = Right( parametros(j) , Len(parametros(j)) -  InStr( parametros(j) , &quot;=&quot;) )
 if valor = &quot;&quot; Then valor = sValue Else valor = valor &amp;&quot;,&quot;&amp; sValue End If
 Next
 End if
 End if
 If tit &lt;&gt; &quot;&quot; then
 tit = &quot;/&quot;&amp; FormataTitulo( tit )
 If cat &lt;&gt; &quot;&quot; then
 cat = &quot;/&quot;&amp; FormataTitulo( cat )
 End if
 Else
 tit = &quot;/&quot;
 End if
 If valor &lt;&gt; &quot;&quot; Then    valor = &quot;-&quot; &amp; valor&amp;&quot;.html&quot;    End If
 urlAmigavel = URL &amp; arquivo &amp; cat &amp; tit &amp; valor
End Function
'---------------------------------------------------------------
Function ereg_replace(ByVal ereg_vetor, ByVal repl, ByVal valor)

&lt;pre&gt; ereg_vetorV = Split(ereg_vetor, &quot;-&quot;)
 If ubound(ereg_vetorV) &gt; 0 Then
 charName   = Split(ereg_vetorV(0),&quot;|&quot;)
 For i_ereg = 0 To UBound(charName)
 valor = Replace(valor, charName(i_ereg), repl)
 Next
 If UBound(ereg_vetorV) &gt;= 1 then
 charID     = Split(ereg_vetorV(1),&quot;|&quot;)
 If Join(charID) &lt;&gt; &quot;&quot; then
 For i_ereg = 0 To UBound(charID)
 valor = Replace(valor, &quot;&amp;#&quot; &amp; charID(i_ereg) &amp; &quot;;&quot;, repl)
 Next
 End if
 End if
 End If
 ereg_replace = valor
End Function

&lt;pre&gt;'---------------------------------------------------------------&lt;/pre&gt;
Function FormataTitulo( ByVal s )
 s = Trim(s)
 s = LCase(s)
 s = ereg_replace(&quot;á|à|â|ã|ä|ª-@|224|225|226|227|228|229&quot;,&quot;a&quot;,s)
 s = ereg_replace(&quot;é|è|ê|ë-232|233|234|235&quot;,&quot;e&quot;,s)
 s = ereg_replace(&quot;í|ì|î|ï-236|237|238|239&quot;,&quot;i&quot;,s)
 s = ereg_replace(&quot;ó|ò|ô|õ|º|ö-242|243|244|245|246|186&quot;,&quot;o&quot;,s)
 s = ereg_replace(&quot;ú|ù|û|ü-249|250|251|252&quot;,&quot;u&quot;,s)
 s = ereg_replace(&quot;ç-231&quot;,&quot;c&quot;,s)
 s = ereg_replace(&quot;ñ&quot;,&quot;n&quot;,s)
 s = replace(s , &quot;-&quot;, &quot;&quot;)
 s = replace(s , &quot;&amp;&quot;, &quot;&quot;)
 s = replace(s , &quot; &quot;, &quot;-&quot;)
 s = replace(s , &quot;,&quot;, &quot;&quot;)
 s = replace(s , &quot;?&quot;, &quot;&quot;)
 s = replace(s , &quot;:&quot;, &quot;&quot;)
 s = replace(s , &quot;/&quot;, &quot;&quot;)
 s = replace(s , &quot;.&quot;, &quot;&quot;)
 s = replace(s , &quot;'&quot;, &quot;&quot;)
 s = replace(s , &quot;´&quot;, &quot;&quot;)
 s = replace(s , &quot;&amp;quot;&quot;, &quot;&quot;)
 s = replace(s , &quot;$&quot;, &quot;s&quot;)
 s = replace(s , &quot;!&quot;, &quot;&quot;)
 s = replace(s , &quot;%&quot;, &quot;&quot;)
 FormataTitulo = s
End Function&lt;/pre&gt;

Despois de executar o procedimento acima sua implementação estará concluída e seu site já estará funcionando com URL’s amigáveis. Para quem possui conhecimentos de SEO, fique atento às visitas do seu site. Faça alguns estudos e identifique se o site obteve melhor posicionamento nos buscadores mais populares.
Se ainda houver dúvidas, sugestões ou qualquer comentário sobre o artigo, fique a vontade para deixar seu comentário. Ficarei feliz em poder ajudar.

Como referencia, deixo uma pagina (em ingles) que vai ajudar a debugar problemas com o .htaccess

The Six Most Common Htaccess Problems and How to Fix Them

Até breve.

94 respostas para “ISAPI REWRITE com ASP clássico 3”.

  1. Avatar de Deives

    Olá Diego, muito boa a dica simples e pratica, mas fiquei com uma dúvida.
    eu devo criar os arquivos httpd.ini e/ou .htaccess? Se eu devo criá-los onde devo colocá-los me minha pasta FTP?
    Fiz toda a sua aplicação, não há nenhum erro, mas minhas urls não ficaram amigaveis continuam normais com meus parametros sendo exibidos.
    Onde posso ter errado? veja esse link onde fiz meus testes: http://www.oseuadvogado.com.br/teste/biblioteca.asp – OBS.: A cada titulo existe link na imagem no final da linha

    1. Avatar de diegosanches
      diegosanches

      Obrigado Deives

      Primeiramente peço 1000 desculpas pela demora na resposta, pois devido a alguns problemas de saúde fiquei afastado do meu Blog, mas se voce ainda estiver com problemas faço questão de ajudar tudo bem?

      Isto depende da versão do seu ISAPI. O http.ini deve ficar na pasta raiz do FTP, ja o .htacess funciona em nivel de diretório, ou seja, como ele tem outras funcionalidades além de escrever URL’s amigaveis, ele também é executado no diretorio em que estiver, permitindo regras especificas para cada diretório, porém, como estamos focando sua utilização em reescrita de URL, este também deve ficar na raiz do FTP.

      Se conseguiu resolver poste sua solução para que seja útil para outros usuários, e se não conseguiu poste também que tenho certeza que juntos vamos resolver!

  2. Avatar de Juliano

    Olá Diego, blz?
    Cara, to apanhando igual cachorro pra criar essas urls amigáveis e não estou conseguindo. Estou trabalhando com a Kinghost, com servidor windows e quero converter a seguinte URL:

    http://www.cglondrina.com.br/edificacao/artigo.asp?id=15&titulo=E%20Sua%20Fam%EDlia?%20Como%20vai?

    e gostaria de reescrevê-la em:
    http://www.cglondrina.com.br/edificacao/E-Sua-Familia-Como-vai?

    Como ficaria o arquivo .htaccess?

    Já cassei em todas as documentações possíveis e não consigo acertar.
    Obrigado.

    1. Avatar de diegosanches
      diegosanches

      Olá Juliano, Antes de tudo gostaria de me desculpar pela demora mas fiquei afastado do meu Blog por alguns motivos de saude.

      Você já conseguiu resolver o problema? Se sim, por favor nos informe qual foi a solução para que seja útil para outros usuários, caso contrário vou rapidamente te sugerir a regra para esta situação e agente faz tudo funcionar perfeitamente.

      1. Avatar de Juliano Calão

        Olá Diego,

        Realmente não estou conseguindo.. Minha dificuldade principal está nas expressões regulares..

        Se puder me ajudar, agradeço.

        grande abraço.

      2. Avatar de diegosanches
        diegosanches

        Olá Juliano,
        Sim, posso te ajudar, com o maior prazer. Mas me diga se suas dúvidas são em relação a como expressões regulares funcionam, ou se você quer entender somente como a regra funciona dentro de uma URL. Qual é sua dúvida?!?

  3. Avatar de Daniel Antoniassi
    Daniel Antoniassi

    Caro Diego, tudo bom?

    Muito boa sua explanaçào sobre o ISAPI, mas
    eu tenho uma grande dúvida:

    Como eu faria pra ISAPI identificar que há uma sessão asp Clássico ativa, e caso nào esteja ativa impedir o acesso ao diretório e seus subdiretórios?

    isso é uma grande dúvida minha.

    Meus parabéns pelo seu artigo!

    1. Avatar de diegosanches
      diegosanches

      Olá Daniel, tudo bem e contigo??
      Obrigado e vamos lá, se eu entendi bem você quer permitir acesso à pasta somente se for iniciada a partir de um arquivo asp correto? Por exemplo pagina.asp eu libero acesso, e pagina.php, imagem.jpg, documento.doc eu nego o acesso e digo que o arquivo é inexistente? É isto mesmo?

      Confesso que fiquei com duvida sobre a sua pergunta mas se for isto é você criar uma regra que permita negue acesso a todo tipo de arquivo que não seja asp:

      RewriteRule ^/.php$ /erros/404.asp
      RewriteRule ^/.jpg$ /erros/404.asp
      RewriteRule ^/.doc$ /erros/404.asp

      Existem algumas outras maneiras, mas vamos começar assim para ver se é isto que precisa tudo bem?

  4. Avatar de Oberdan Carlos

    Olá Diego, como vai.
    Cara achei muito interessante seu artigo. Porei estou com uma pequena duvida.
    Quero redirecionar uma pagina da seguinte forma.
    O usuario digita “www.meusite.com/1234” por exemplo ou “www.meusite.com/A5gh”. Gostaria de redireiconar para a pagina proceso.asp para poder processar oque vem depois da “barra”. Entendeu? Quero que, sempre que ouver algo depois da barra va para uma pagina especifica. Mas so quando ouver algo depois da barra.
    Fico no aguardo, por uma ajuda, Abraços!

    1. Avatar de diegosanches
      diegosanches

      Olá Carlos, vou bem! espero que voce também!

      Imagino que uma regra simples resolverá seu caso. Seria algo como:

      RewriteRule ^/([a-zA-Z0-9_-]+)$ /processo.asp?var=$1 [I,L]

      Onde ?var= indica a variavél que voce irá receber na processo.asp para poder tratá-la.

      var = Request.QueryString(“var”)

      espero que ajude.
      Abraços.

      1. Avatar de Fernando
        Fernando

        Desculpe reviver esse assunto, mas tem como fazer exatamente isso no web.config. O usuário digita “www.meusite.com/1234” por exemplo ou “www.meusite.com/A5gh” e antes de qualquer coisa o web config envia para tratar na página processo.asp

      2. Avatar de Fernando
        Fernando

        Tem como fazer exatamente isso no web config? Como ficaria o código?

  5. Avatar de sergio

    Olá, Diego,

    td bem?

    Pedi ao meu servidor (Telium) para liberar o ISAPI Rewrite, porém estou testando com o http://www.sergioribeiro.com.br/default/ e não estou conseguindo…. mesmo colocando o httpd.ini como vc sugeriu.

    Como faço para saber se esse serviço está ativo em meu servidor?

    Sérgio

    1. Avatar de diegosanches
      diegosanches

      Olá Sergio, tudo bem! E contigo?

      Bem, o primeiro passo é verificar com o servidor qual a versão do ISAPI REWRITE instalada, pois ai você terá certeza se usará o httpd.ini ou .htaccess.

      Alguns servidores determinam que o usuário solicite a ativaçãdo destes filtros via abertura de chamado no helpdesk. Isto porque para que funcione, o site deve estar em um pool de aplicação separado, e geralmente os serviços de hospedagem oferecidos são servidores compartilhados.

      No caso de dificuldades, acho que é melhor tirar algumas dúvidas com o servidor de hospedagem, pois não vale a pena quebrar a cabeça nos seus códigos, se o problema for na hospedagem.

      Tendo novidades nos informe ok??

  6. Avatar de Leonardo

    Diego,
    Gostaria que você me ajudasse passo-a-passo a fazer URL amigáveis em meu site.

    Agradeço a atenção e aguardo contato por email,
    Leonardo

    1. Avatar de diegosanches
      diegosanches

      Olá Leonardo, tudo tranquilo por ai?

      Basicamente, um passo a passo para implementar URL’s amigáveis seria:

      1. Verificar se seu servidor de hospedagem possui suporte a ISAPI REWRITE, e qual versão.

      2. Crie um sitemap de todo seu site.

      2.1. Trata-se de uma lista de todos os links de seu site. Guarde em um arquivo de texto ou até mesmo planilha do excel. Se o link possuir valores dinâmicos especifique com um $, seguido de um número que represente sua ordem na URL. Por exemplo http://www.seusite.com.br/detalhes.asp?id=$1&produto=$2

      3. Para cada link que você anotou, crie uma regra de acordo com as notações do ISAPI REWRITE. Veja como fazer isto neste mesmo artigo na sessão “Criando regras para as urls amigáveis.”. Neste momento você já estará criando seu arquivo .htaccess (ou httpd.ini)

      4. Analise o sitemap que você gerou anteriormente, e separe todos os links que possuam valores sendo passados como parâmetros.

      4.1. Com o resultado desta analise, você saberá se poderá utilizar uma função única para tratamento de todos os links do site (Ex. Function urlAmigavel(param) ), ou se será necessário criar alguma função exclusiva (Ex. Function urlAmigavel_1(param1), Function urlAmigavel_2(param1, param2) )

      4.2. Crie uma função em ASP que faça todo o tratamento de todos os links possíveis que você obteve no item

      4. Como teste, se você montar um programa com o seguinte código o sistema deverá imprimir http://www.seusite.com.br/detalhes/nomedoproduto-1.html. Neste caso você terá de entender todo o código acima citado na sessão “Função para converter url amigável”. Pela rápida olhada que dei na estrutura do seu site, creio que a minha função será útil sem quase nenhuma alteração.

      5. Coloque a função de conversão de URL amigável na biblioteca de funções do seu site. Não se esqueça também de colocar as funções auxiliares.

      6. Localize em todas as suas páginas, todas ocorrências do elemento a (ancora). No meu caso, eu uso por exemplo o Adobe Dreamweaver, pressiono CTRL + F, faço uma busca em todo o diretório do meu site pela palavra chave “<a href=”. Provavelmente aparecerão centenas de resultados. Temos então de tratar um por um, e substituir <a href=”detalhe.asp?id=15& Produto=nome”>nome do produto</a> Por <a href=”<%=URLamigavel(“detalhe.asp?id=15&produto=nome”,”nome do produto”)%>”>nome do produto </a>.

      7. Repita o item 6, mas agora efetue a busca pela palavra chave “<form “ e faça a mesma substituição na propriedade action do Elemento.

      8. Efetue testes. Navegue por todos os links do seu site, envie formulários de contato, e navegue novamente. Faça muitos testes, agora nada mais pode dar errado.

      9. Se você encontrar algum problema e desejar reverter rapidamente o procedimento, crie uma função de escape que retorne o mesmo valor passado como paraemtro, anulando assim qalquer ação de conversão. Veja como fazer isto aqui neste artigo também.

      Espero que tenha ajudado.

  7. Avatar de Daniel Antoniassi
    Daniel Antoniassi

    Boa Tarde Diego, gostaria de saber se o ISAPI filter pode definir todos os cookies como HTTPONLY na aplicação, isso é possível? Você teria um exemplo se sim?

    Um grande abraço e parabéns pelo excelente blog, com conteúdo além do que encontramos por ai.

    1. Avatar de diegosanches
      diegosanches

      Olá Daniel, bom dia.

      Eu confesso que nunca fiz isto, e também não sei como fazer.
      Mas pelo pouco que sei é melhor fazer isto direto na aplicação. Fica mais fácil de gerenciar os cookies.

      Dê uma olhada neste link, acho que pode te ajudar:

      http://msdn.microsoft.com/en-us/library/ms972826
      http://stackoverflow.com/questions/2990686/setting-httponly-for-classic-asp-session-cookie

      muito obrigado pelo elogio!

  8. Avatar de freeartwebThiago
    freeartwebThiago

    Mui Legal o post, porem tenho um problema, quando clico em um seguindo link a url vai concatenando logo não consegue interpretar e fica algo como:
    clico no link 1 fica: http://www.meusite.com.br/xxx
    clico no link 2 fica: http://www.meusite.com.br/xxx/yyy
    clico no link 1 denovo fica: http://www.meusite.com.br/xxx/yyy/xxx, ou seja, não volta para http://www.meusite.com.br/xxx
    Você sabe o motivo, uso isapi rewrite 3 no win 2003 e iis 6.

    abs.

    1. Avatar de diegosanches
      diegosanches

      Olá Thiago, tudo bem?

      Eu acho que vou conseguir te ajudar sim.

      Na estrutura do seu site, voce terá sempre de colocar uma variavel para “amarrar” o seu dominio.
      Por exemplo, perceba que na funcao Function urlAmigavel(pag, ByVal cat, ByVal tit) eu tenho uma variavel URL, onde informo o nome do dominio.
      E no final eu sempre concateno esta variavel em primeiro lugar. veja esta parte:

      urlAmigavel = URL & arquivo & cat & tit & valor

      Isto fará com que o link todo seja reformatado toda vez que for acionado, e assim nao tera mais este tipo de problema.

      No meu caso, eu digitei o nome do dominio, mas voce pode usar Request.ServerVariables (referencia: http://www.w3schools.com/asp/coll_servervariables.asp) para isto.

      Caso nao tenha ficado claro, por favor me envie mensagem que agente da um jeito de resolver isto rapidinho.
      até logo.

  9. Avatar de Ederson Jr.
    Ederson Jr.

    Olá diego, boa tarde.

    Estou trabalhando em um projeto em asp e está totalmente pronto.
    porem gostaria de migar todo projeto convertendo as urls em amigaveis.

    Ja tenho tudo mapeado, porem não estou conseguindo implementar o exemplo do seu post no blog.

    pode me dizer o que estou fazendo de errado baseado no passo a passo abaixo:

    1) Tenho um arquivo chamado funcoes.asp onde contem todas as funções que preciso incluindo a urlAmigavel.

    2) criei o arquivo teste .htaccess contendo:
    RewriteRule ^/home/?([a-zA-Z0-9_-]+)?(.html)?$ /default.asp [I,L]
    RewriteRule ^/secoes/?([a-zA-Z0-9_-]+)?(.html)?$ /secoes.asp [I,L]
    RewriteRule ^/grupos/?([a-zA-Z0-9_-]+)?(.html)?$ /grupos.asp [I,L]

    tentei assim também:
    RewriteRule ^/secoes/secao-de-produtos?([a-zA-Z0-9_-]+)?(.html)?$ /secoes.asp [I,L]
    RewriteRule ^/grupos/grupo-de-produtos?([a-zA-Z0-9_-]+)?(.html)?$ /grupos.asp [I,L]

    3) Testei alguns links como:
    Seção de Produtos

    <a href="”>Grupo do Produto

    <a href="”>Grupo do Produto

    porem nenhum deles funcionou..

    o link no navegador fica com prometido, mas não faz o direcionamento para a pagina desejada.

    Poderia me ajudar ?

    1. Avatar de diegosanches
      diegosanches

      E ai Ederson, como estas?

      Vamos ver! Por enquanto vamos esquecer a chamada da função no link, apenas para ver se o htaccess está sendo chamado da maneira correta.

      Por exemplo, para a seguinte regra:
      RewriteRule ^/secoes/?([a-zA-Z0-9_-]+)?(.html)?$ /secoes.asp [I,L]

      Tente acessar o link (na mão)
      http://www.seusite.com.br/secoes/qualquer-palavra.html

      Isto deve ter o mesmo retorno que
      http://www.seusite.com.br/secoes.asp

      Se funcione, me avise que partimos para o próximo passo.
      Mas se não funcionar, tente acessar o link para ver se o .htaccess está funcionando corretamente:

      http://www.seusite.com.br/.htaccess ou http://www.seusite.com.br/httpd.ini

      Se for possível fazer o download do arquivo, significa que o ISAPI pode não estar instalado em seu servidor. Se ver a mensagem “o arquivo não pode ser encontrado”, e tiver certeza de que o arquivo está na pasta raiz do seu site, será uma boa noticia, significa que está tudo instalado direitinho e podemos partir para o próximo passo.

      Veja o que acontece, e nos informe depois.

  10. Avatar de Wellington

    Olá Diego. Muito bom mesmo essas dicas, mas estou apanhando já ha um mes e nada de sair essas url’s amigáveis. Gostaria que se possivel vc me acompanha-se para que eu consiga fazer isso em meu site. Desde já obrigado!!!!

    1. Avatar de diegosanches
      diegosanches

      E ai Wellington. Não se preocupe, agente vai conseguir fazer funcionar estas URL’s sim. Mas qual é a sua dúvida, o que você já fez, o que falta? Onde “emperrou”?

  11. Avatar de Wellington

    colocando meu site para que vc de uma olhada!!!

    1. Avatar de diegosanches
      diegosanches

      Certo. Coloca o link ai que fica mais fácil mesmo!
      abraços

  12. Avatar de master08

    Oi Diego,
    Obrigada pelas dicas, mas não consigo aplicá-las p/ que quero.
    Sem querer abusar, o meu interesse é que fique assim:
    http://www.loja.com.br/celulares-com-3-chips-s1037/
    onde “s1037” seria a seção do produto. Para o produto funcionaria igual, sendo “p152450”.
    Tentei assim:
    RewriteRule ^/([a-zA-Z0-9_-]+)-([0-9])?$ /secao.asp?id=$2 [I,L]
    E se tiver outros parâmetros na url:
    http://www.loja.com.br/celulares-com-3-chips-s1037/?pag=1&filtro_preco=1
    Como fazer? Se não puder responder não tem problema. Não consigo achar um script parecido com esse em lugar nenhum.
    Obrigada. Veronica

    1. Avatar de diegosanches
      diegosanches

      Olá Veronica, tudo bem?? claro que posso responder. E sempre um prazer ajudar a galera que passa por aqui.

      A sua regra está correta. Você tem o primeiro conjunto de dados representando o titulo, o segundo representando o codigo, e depois o apontamento de sua página com referencia correta para a variavel numero 2.

      Então antes de continuarmos, você tem alguma outra regra que já esta funcionando? Pergunto para saber se o ISAPI Rewrite já está funcionando o seu servidor. Consegue colocar o seu .htaccess completo?

      Se você preferir, pode me adicionar no skype e agente troca informações. diego_websanches. Fique a vontade para perguntar.

      abraços

      1. Avatar de Veronica

        Oi, Diego,
        Muito obrigada por responder! Já tenho um arquivo .htaccess funcionando com algumas regras simples. Por exemplo: RewriteRule ^/novidades?$ /novidades.asp e regras para proteção de páginas xml. Nunca consegui fazer regras para as urls amigáveis, especialmente para as urls que contém parâmetros de filtros e paginação. Já comprei livro sobre expressões regulares, porém não consegui aplica-las na situação das urls que descrevi. O que sugere? Grata,Veronica

      2. Avatar de diegosanches
        diegosanches

        Olá Veronica,
        Legal, se tudo está funcionando fica muito mais facil. Vamos por partes. Primeiro vamos falar da regra que me comentou no post anterior:

        Veja este exemplo que preparei para voce:

        Para o link:
        http://www.bitmaker.com.br/celulares-com-3-chips-s1037

        Eu tenho a regra:
        RewriteRule ^/([a-zA-Z0-9_-]+)-([a-zA-Z0-9_-]+)?/?(.html)?$ /secao.asp?id=$2

        E no secao.asp eu tenho apenas a seguinte linha para verificarmos a resposta:
        <%="ID: " & request.querystring("id")%>

        Veja que eu mudei apenas a segunda variavel. No exemplo que me passou você escreveu a regra apenas com numeros inteiros. Eu observei que voce possui letras no seu código (no caso o S) então eu mudei a expressão regular para também aceitar caracteres. E funcionou. Vou deixar este exemplo disponivel até quando precisar. Veja se isto ajuda. Se não ajudar, por favor, me diga o resultado e vamos tentar novamente.

        abraços.

  13. Avatar de Veronica

    OI, Diego,
    Me esqueci de falar que algumas regras fazem a página perder o estilo .css. Será que devo usar o endereço absoluto dentro header para evitar isso, ou existe outro recurso para preservar o css? Thanks! Veronica

    1. Avatar de diegosanches
      diegosanches

      Olá Veronica.
      Sim, exatamente. A partir de agora você deve colocar endereço absoluto em seus .CSS e .JS. Enquanto o ISAPI Rewrite consegue executar regras e realizar validações, o navegador entende apenas “níveis de diretórios” então o caminho completo do arquivo deve ser informado.

      Geralmente eu utilizo uma variavel global contendo o dominio do meu site, e concateno com o nome do arquivo .CSS ou .JS. Imagino que você tenha pensado no mesmo!
      Bem, precisando de algo, estamos por aqui!

  14. Avatar de Rodrigo De Castro Teixeira

    Diego
    tudo bem

    Preciso de uma ajuda, estou tentando mudar os diretorios e não estou conseguindo.

    Queria diminuir a URL das imagens

    RewriteRule ^/default/config/imagens_conteudo/produtos\/?$ /loja/config/imagens_conteudo/produtos/ [I,L]

    Eu tenho um diretório /loja/, queria mudar também, já fiz o código mas ele não funcona, ex. default/faleconosco.asp ou poderia ser assim também faleconosco.asp, eu não queria colocar arquivo por arquivo no .htaccess

    RewriteRule ^/default\/$ /loja/ [I,L]

    Por ultimo a paginação e ordenação, seria assim…

    RewriteRule ^/([a-zA-Z0-9_-]+)/([0-9]+)/([0-9]+)/([0-9]+).html?orderby=(.*)$ /loja/produtos.asp?tipo_busca=subcategoria&codigo_categoria=$2&codigo_subcategoria=$3&PN=$4&orderby=$5

    RewriteRule ^/([a-zA-Z0-9_-]+)/([0-9]+)/([0-9]+)/([0-9]+).html$ /loja/produtos.asp?tipo_busca=subcategoria&codigo_categoria=$2&codigo_subcategoria=$3&PN=$4 [I,L]

    Valeuuu

    1. Avatar de diegosanches
      diegosanches

      E ai Rodrigo, tudo bem, e contigo?

      Nooussa, essa será uma missão muito interessante, hehe.
      Sim, infelizmente voce terá que colocar página por página nas regras. Em linguagens como .Net ou PHP nós temos frameworks para nos ajudar a criar as regras gerais, mas em ASP clássico não tem outra opção.

      Você consegue me passar o link de sua loja para eu entender melhor na prática.
      Ainda não entendi exatamente o problema que está tendo, se apenas estas regras não funcionam, se todas etc.

      Outro ponto importante que eu percebi em suas regras é que voce deve referenciar de alguma forma a sua regra a uma página.
      Por exemplo a regra abaixo deve ter referencia a produtos.asp de alguma forma:
      RewriteRule ^/PRODUTOS/([a-zA-Z0-9_-]+)/([0-9]+)/([0-9]+)/([0-9]+).html?orderby=(.*)$ /loja/produtos.asp?tipo_busca=subcategoria&codigo_categoria=$2&codigo_subcategoria=$3&PN=$4&orderby=$5

      Se não a regra será generalizada e irá procurar a primeira página ASP da lista que servir a regra.

      Você consegue decompor as suas regras para depurarmos variavel por variavel?

      1. Avatar de Rodrigo De Castro Teixeira

        Blz,,, Então o meu problema maior e como eu faço pra passar os parametros,
        Eu estou perdendo os apontamentos do google analytics

        #categoria
        RewriteRule ^/([a-zA-Z0-9_-]+)/([0-9_-]+)\/?$ /loja/produtos.asp?tipo_busca=categoria&codigo_categoria=$2 [I,L]

        RewriteRule ^/([a-zA-Z0-9_-]+)/([0-9_-]+)/?gclid=(.*)$ /loja/produtos.asp?tipo_busca=categoria&codigo_categoria=$2&gclid=$3 [I,L]

        RewriteRule ^/([a-zA-Z0-9_-]+)/([0-9_-]+)/([0-9]+).html?orderby=(.*)$ /loja/produtos.asp?tipo_busca=categoria&codigo_categoria=$2&PN=$3&orderby=$4 [I,L]

        RewriteRule ^/([a-zA-Z0-9_-]+)/([0-9_-]+)/([0-9]+).html$ /loja/produtos.asp?tipo_busca=categoria&codigo_categoria=$2&PN=$3 [I,L]

        Eu vi um exemplo na Net e tentei mudar mas acabou dando pau nas regras.
        #categoria
        RewriteRule ^/([a-zA-Z0-9_-]+)/([0-9_-]+)\/? /loja/produtos.asp?tipo_busca=categoria&codigo_categoria=$2 [L,QSA]

        RewriteRule ^/([a-zA-Z0-9_-]+)/([0-9_-]+)/([0-9]+).html /loja/produtos.asp?tipo_busca=categoria&codigo_categoria=$2&PN=$3 [L,QSA]

        O meu site é http://www.acquabrasilpiscinas.com.br

      2. Avatar de diegosanches
        diegosanches

        Ola Rodrigo, como vai, tudo bem?

        Neste caso voce nao precisa colocar o nome do parametro do lado esquerdo da regra.

        Por exemplo, ao inves de:
        RewriteRule ^/([a-zA-Z0-9_-]+)/([0-9_-]+)/?gclid=(.*)$ /loja/produtos.asp?tipo_busca=categoria&codigo_categoria=$2&gclid=$3 [I,L]

        Tente:
        RewriteRule ^/([a-zA-Z0-9_-]+)/([0-9_-]+)/(.*)$ /loja/produtos.asp?tipo_busca=categoria&codigo_categoria=$2&gclid=$3 [I,L]

        O lado direito vai determinar o nome do parametro, e em que posição buscar a informação.

        boa sorte. Estou contigo.
        abs.

  15. Avatar de Leonardo Andrade
    Leonardo Andrade

    Olá Diego,

    Também estou com um probleminha, talvez tu consiga me ajudar.
    o meu site está na pasta /site não está na raiz(/web)
    Então dentro da pasta /web/site eu criei o arquivo .htaccess, criei uma regra para ocultar a extensão .asp e funcionou belezinha.

    Instrução para ocultar extensão .asp:

    RewriteRule ^([^?]+)\.asp$ $1 [NC,R=301,L]
    RewriteCond %{REQUEST_FILENAME}.asp -f
    RewriteRule (.*) $1.asp

    Porém, quero criar uma regra para modificar a url:
    http://www.meusite.com.br/site/noticias/noticia?noticia=2&id=9&pag=mineirinho_e_peterson_crisanto_sao_destaques_de_quarta_em_ballito

    para:
    http://www.meusite.com.br/site/noticia/2012/07/13/mineirinho_e_peterson_crisanto_sao_destaques_de_quarta_em_ballito.html

    Tem alguma sugestão?

    Obs.: eu coloquei a data na forma que quero a url nova, mas é porque eu tenho como recuperar uma variavel com a data da noticia.

    Enfim, to quebrando a cabeça aqui, espero que você consiga me ajudar.

    Abs

    1. Avatar de diegosanches
      diegosanches

      Olá Leonardo, como vai, tudo bem?

      Não sei se vou conseguir te ajudar, mas vou tentar! Vamos la:

      Não importa a quantidade ou valor da variavel que voce vai informar no link, somente importa a ordem que voce informará as variavies que voce realmente usa em sua página. Por exemplo a variável data voce não usará (porque já tem ela dentro da noticia), mas o ID sim voce precisará, pois sem ele o sistema não conseguirá encontrar a noticia.

      Então veja como ficaria sua regra:

      RewriteRule ^/site/noticia/([0-9]+)/([0-9]+)/([0-9]+)/([a-zA-Z0-9_-]+)/?(.html)?$ /site/noticia.asp?noticia=$(posicaox)&id=$(posicaox)&pag=$4 [I,L]

      /site/noticia/ = pasta e arquivo
      ([0-9]+)/ = ano ($1)
      ([0-9]+)/ = mes ($2)
      ([0-9]+)/ = dia ($3)
      ([a-zA-Z0-9_-]+)/? = pag ($4)
      (.html)? = extensão/opcional

      Veja que na regra eu coloquei: pag=$4, dizendo ao servidor que o conteudo da variavel pag está na posição 4.
      Assim em sua página ASP voce apenas recupera o valor com um simples request:

      pag = Request.QueryString(“pag”)

      E esta variavel voce consegue mandar pro seu banco e recuperar a noticia. Neste caso estou atribuindo “pag” como seu ID. Isto por que é a unica variavel que voce possui em ambos os links, no que voce tem atualmente, e no que voce quer como “amigável”.

      Veja se isto ajuda, senão agente vai mais longe.

  16. Avatar de Rafael
    Rafael

    Por favor poderiam me ajudar?
    Estou literalmente perdido. Cenário:
    1 – Site hospedado na locaweb (isso existe lá)
    2 – Já logo no segundo teste onde diz das regras. è para ciriar a regra no arquivo “.ini” ou no “.asp”

    Desde já grato
    PS: Preciso muito disso.

    1. Avatar de diegosanches
      diegosanches

      Olá Rafael, como vai, tudo bem?
      Sim podemos, vamos lá!

      Voce cria as regras no arquivo .ini
      Mas antes tenha certeza da versão do isapi rewrite de seu servidor.
      Se for a versão 2 é o arquivo .ini
      Agora se vor a versão 3 é o arquivo .htaccess

      Com algumas mudanças na sintaxe das regras, mas é bem simples!

      Se ainda ouver dúvidas, fique a vontade!

      1. Avatar de Rafael
        Rafael

        Oi Diego,

        É a versão 2 que e esta instalada no servidor.
        Quando subo o arquivo .ini a impressão que ocorre é que o site quebrou, que o arquivo css se perdeu, o html fica todo quebrado.
        Poderia me ajudar por favor?
        Abs.

      2. Avatar de diegosanches
        diegosanches

        Sim, exatamente. A partir de agora você deve colocar endereço absoluto em seus .CSS e .JS, e tambem nas imagens.

        Enquanto o ISAPI Rewrite consegue executar regras e realizar validações, o navegador entende apenas “níveis de diretórios” então o caminho completo do arquivo deve ser informado.

        Geralmente eu utilizo uma variavel global contendo o dominio do meu site, e concateno com o nome do arquivo .CSS ou .JS. Imagino que você tenha pensado no mesmo!
        Bem, precisando de algo, estamos por aqui!

      3. Avatar de Rafael
        Rafael

        Oi Diego Obrigado, mas agora as duvidas são outras… Acredito que falta pouco, agradeço pela atenção, seguem minhas duvidas:

        Meu link para noticias é assim:
        noticias-detalhe.asp?id_noticia=

        No seu modo você colocou assim:

        URLamigavel(“noticia.asp?idNoticia=15&idCategoria=23&Pagina=3″,”nome da Categoria”,”Titulo Noticia”)%>

        O que esta me trazendo problemas trazendo a url toda errada.
        Como faço adaptar a minha realidade?
        Obrigado conto com sua ajuda! rs.

      4. Avatar de diegosanches
        diegosanches

        Ola Rafael.

        Tudo que precisa fazer e retirar as variaveis que voce nao precisa. Voce precisa somente de um id_noticia. Veja que no meu exemplo tambem tem idNoticia. Entao basta somente retirar as demais:

        URLamigavel(“noticia.asp?id_noticia=15″,””,”Titulo Noticia”)%>

        Como esta vindo sua URL? O que esta errado?

  17. Avatar de Daniel Antoniassi
    Daniel Antoniassi

    Boa tarde Diego, tudo bem?

    Eu tenho a seguinte dúvida, é possível utilizar o ISAPI FILTER para por exemplo eu acessar a url http://www.dominio.com/1265 e eu conseguir capturar este numero (1265) como sendo um valor de uma variável interna?

    Um grande abraço!

    1. Avatar de diegosanches
      diegosanches

      Olá Daniel, tudo bem e voce?

      Sim, é possivel e bem tranquilo.

      Sendo sua URL: http://www.dominio.com/1265
      Voce poderia usar uma regra semelhante a esta:

      RewriteRule ^/([a-zA-Z0-9_-]+)$ /default.asp?var=$1 [I,L]

      Na sua pagina .asp basta voce recequer sua variavel via GET e utiliza-la normalmente no seu script.

      Abraços.

      1. Avatar de Daniel Antoniassi
        Daniel Antoniassi

        Diego, muito obrigado por sua resposta, fiquei muito feliz em saber que é possível e somente você me deu esta luz :).

        Só mais uma pergunta, como faço pra gerar um arquivo .htacess com as regras que preciso, onde posso editar um arquivo assim?

        Um grande abraço e parabéns pelo seu blog!

      2. Avatar de Daniel Antoniassi
        Daniel Antoniassi

        Como faço pra instalar em meu iis 6.1 o arquivo .htaccess? Desconsidere a mensagem anterior 🙂 Um grande abraço!

      3. Avatar de diegosanches
        diegosanches

        Se o ISAPI REWRITE FILTER ja estiver instalado, basta voce colocar o arquivo na pasta raiz do seu site.
        Se nao estive instalado, dai seria entao tema para um outro post. Se precisar fazer isto de uma procurada no Google, existem diversos artigos interesantes.

  18. Avatar de Alexandro Delgado
    Alexandro Delgado

    Boa tarde Diego,

    Gostaria de parabenizar você pela sua matéria, realmente, me ajudou muito!!!

    Queria dizer que estudei o seu artigo, testei, bastante o mesmo e consegui muita coisa com o mesmo! Porém empaquei com dois problemas que não consigo encontrar solução, creio que deva ser por ser novato em url amigáveis, por este motivo venho implorar a sua ajuda pois necessito terminar essas urls.

    1º) No seu artigo você demonstra a url dinâmica como:
    http://www.seudominio.com.br/noticia/esportes/pele-e-o-rei-do-futebol-15,23,3.html

    Pesquisando na internet, encontrei um site que não faz a utilização de variáveis no final e nem do “.html”, exemplo:

    http://www.belezanaweb.com.br/alfaparf/alfaparf-active-hair-power-purify-shampoo-250ml/

    A pagina que captura este produto é uma pagina dinâmica porém sem a passagem da variável.
    Ai me veio a dúvida ele deve estar trazendo o produto através de um tratamento na string, utilizando o “alfaparf-active-hair-power-purify-shampoo-250ml” para fazer na base, ou existe alguma outra forma de passar os parâmetros de forma oculta?

    2º) Fazendo um teste com o seu código consegui chegar em:

    http://www.meusite.com.br/produtos/alfaparf/alfaparf-semi-di-lino-diamante-illuminating-kit-duo-2-produtos-15,23,3.html

    sendo que:
    http:// meu site / pagina que processa / categoria / produto – variáveis e .html

    estudando a sua função asp, verifiquei que os parâmetros passados são:
    URLamigavel(“pagina.asp”, “categoria”, “nome do produto”)

    Então gostaria de saber se existe alguma forma de mudar a mesma para suportar o caracter “/” dentro da opção categoria retornando sem o nome da pagina asp exemplo:

    URLamigavel(“produtos.asp”, “marca/categoria/sub-categoria”, “nome do produto”)

    Ou até mesmo concatenando tudo:

    URLamigavel(“produtos.asp”, “marca/categoria/sub-categoria/nome-do-produto”)

    Que retornaria: http://www.meusite.com.br/marca/categoria/sub-categora/produto/

    bem parecido com este link que verifiquei, que não traz o nome da pagina:
    http://www.belezanaweb.com.br/alfaparf/alfaparf-active-hair-power-purify-shampoo-250ml/

    obs: Caso de para fazer mas você ache que por eu ser novato no assunto não conseguiria fazer estou disposto a pagar pela ajuda!

    E já me esquecendo, gostaria de pedir se possível que você retorne está matéria explicando um pouco mais sobre como compor expressões regulares para urls, pois mesmo procurando bastante sobre o assunto fica bastante vago para quem não tem conhecimento em expressão regular.

    Muito obrigado.

    1. Avatar de diegosanches
      diegosanches

      Ola Alexandre,

      Sim, você tem razão a passagem de variáveis, nome da pagina e da extensão não som obrigatórias. A forma apresentada este artigo e a mais básica e simples possível, a penas para fins didáticos.

      E você tem razão novamente, o tratamento da string deve ser feito na pagina ASP.
      Dependendo de como você montar sua função, você não precisa passar o segundo atributo, uma vês que você capturou a URL, que será unique, você pode correr seu banco de dados e resgatar a categoria, subcategoria e qualquer dado que precisar. Por em sua função será mais trabalhosa de montar e consumirá maior tempo de processamento. Mas nao se preocupe, isto nao ira prejudicar seu site.

      Como você não quer utilizar o nome da pagina em sua URL vamos focar nas suas regras do .htaccess:

      Por exemplo, tudo que vier antes de ? será opcional:

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

      Nesta regra se você chamar a URL sem ou .html ira a funcionar pois o ? Esta indicando que este bloco e opcional.

      No mesmo exemplo você vê produto/? que indica que a barra separando os valores e opcional. Se você quiser que a palavra produto seja opcional adicione () para indicar o uso de um bloco:

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

      Com a regra acima estas duas URL’s irao funcionar, porque estamos dizendo que produto/ e opcional.

      http://www.seudominio.com.br/produto/pele-e-o-rei-do-futebol.html
      http://www.seudominio.com.br/pele-e-o-rei-do-futebol.html

      Espero que tenha clareado um poço suas duvidas, e não se preocupe que você não precisará pagar nada, a ideia e ajudar, então tente mais um pouco e se ainda tiver dúvidas poste aqui que terei prazer em ajuda-lo.

      Quanto expressões regulares, este e um assunto mais complicado e exige uma boa explicação. Eu vou escrever um artigo especifico somente para este tema e te passo o link. Acredito que assim será mais fácil.

  19. Avatar de Alexandre Lopes

    Olá Diego, muito boa sua iniciativa em criar esse post para os usuarios do asp tradicional.

    vamos a minha implementação, ja conseguir fazer funcionar, porém queria otimizar.

    1 – Quando o site é bilingue, e eu tenho a mesma pagina ambas, ex. contact.asp
    – Minha regra ficou assim: RewriteRule ^contact/$ /contact.asp$1
    RewriteRule ^contato/$ /contact.asp$1

    Onde eu trato o idioma pelo dominio acessado. Existe uma regra que atenda isso em apenas uma linha?

    2 – Estou melhorando minhas URL’s.
    URL antiga = meusite.com/categoria/subcategoria/
    URL nova = meusite.com/categoria/subcategoria-palavraChave

    Como fazer para quando acessarem meu site pela url antiga seja redirecionado para a nova, sem eu precisar dizer qual subcategoria. tipo: ser uma regra genérica.

    3 – Minhas regras de URL amigavel se resume a isso aqui, funciona, mas nao sei se estar certo. rsrsr

    RewriteRule ^t-shirt-designs/([a-z,A-Z,_-]+)-graphics/$ produtos.asp?tipo_busca=estilos&estilo=$1

    Da um help ae Diego. agradeço desde ja!
    abraço!

    1. Avatar de diegosanches
      diegosanches

      Olá Alexandre, vamos ver se consigo ajudar:

      1. Sim, até existe. Você pode usar expressões regulares para criar esta regra. Seria uma combinação da prefixo “conta” com condicionais para os sufixos “ct” e “to”, ou algo do tipo, mas pode ser meio complicado então o que eu recomendo é usar realmente as 2 linhas. Dependendo do site eu costumo escrever as regras na maão mesmo, uma por uma. O arquivo fica maior, porém com fácil leitura.

      2. Você tem que usar o redirecionamento permanente. Pode colocar um atributo [R=301,L] no final da linha da regra “URL antiga”, ou então pode colocar no seu ASP o response.addHeader para fazer o redirecionamento permanente, enfim, existem boas técnicas para fazer isto, o que tem de fazer é procurar algo com a palavra chave “redirecionamento 301”.

      3. Sim, se funciona e atende a necessidade do seu negócio acredito que está tudo certo.

      E isto ae! Força na luta! Rewrite em ASP é sempre muito interessante!
      Abraço

  20. Avatar de Ronaldo Faria Storck Eler

    Olá Diego, parabéns pelo post,

    Sempre quis implementar urls amigáveis em meu código, até que agora, resolvi pra valei, e depois de fazer algumas coisas funcionarem, gratamente, encontrei este post, e tenho algumas dúvidas, que ainda, não consegui esclarecer, e que me deixam meio curioso e inseguro:

    1 – Estou usando as minhas condições assim no web.config que está no root e funciona bem:

    rule name=”URL5″ stopProcessing=”true”>
    match url=”^licitacoes$” />
    conditions>
    add input=”{REQUEST_FILENAME}” matchType=”IsFile” negate=”true” />
    add input=”{REQUEST_FILENAME}” matchType=”IsDirectory” negate=”true” />
    /conditions>
    action type=”Rewrite” url=”home/licitacoes.asp” />
    /rule>

    e também assim funciona:

    rule name=”noticias”>
    match url=”^noticias$” />
    action type=”Rewrite” url=”home/conteudo2.asp?cid=3″ />
    /rule>

    Vi que nos post vc usa as regras assim:
    RewriteRule ^/([a-z,0-9,_-]+)/([a-z,0-9,_-]+)/?$ /n.asp?id=$1&t=$2 [I,L]
    RewriteRule ^/default/?([a-zA-Z0-9_-]+)?(.html)?$ /default.asp [I,L]

    É melhor usar desta última forma? qual é a mais indicada o web.config ou o .htaccess?
    Usando o web.config, no root, como meu site fica em /home/aquivos.asp, quando mapeio o link “/licitacoes”, tenho que fazer referência ao ao path completo, se eu criar uma nova pasta, com caracteristicas próprias, tipo “/site/arquivos.asp”, tenho que continuar usando o web.config no root, ou posso colocá-lo dentro de “/site”

    2. Estou tentando redirecionar para o index.asp com este comando:

    rule name=”pagina principal”>
    match url=”^/$” />
    action type=”Rewrite” url=”home/index.asp” />
    /rule>

    mas não tem dado certo, como posso corrigir, pois quando a pessoa clicar no logo do site, ou apenas digitar o http://www.endereco.com, quero que vá direto para o “/home/index.asp”?

    3. Quando eu digito (www.meusite.com.br/carros) e “carros” não está mapeado, aparece uma tela de erro (aquela azul padrão), mas eu gostaria de direcioná-lo para uma página personalizada, indicando que aquela página não existe no site, é possível?

    Obrigado e mais uma vez, parabéns pelo post…

    1. Avatar de diegosanches
      diegosanches

      Olá Ronaldo,
      Obrigado pelos elogios e pela sua participação aqui no Blog.

      1. Eu acredito que o web.config seja mais facil de ler, criar as regras, e também modifica-las. Então ponto para o web.config. Porém o .htaccess tem um melhor desenpenho, tanto pela sua linguagem que é mais proxima da lingaguem de maquina, quanto pela prioridade de acesso, sendo que o servidor requisita primeiro este arquivo, antes do web.config. Entao ponto para o .htacess. E para concluir, o voto de minerva vai para o web.config, considerando que já esta tudo instalado e funcionando, não vejo porque mudar.

      Sim, voce pode ter um .htaccess por diretorio, cada um com suas regras especificas. Existe um parametro no seu servidor que determina se esta funcionalidade esta habilitada ou não. Se não funcionar, peça ao seu servidor que altere este parametro. O mesmo aplica para o web.config.

      2. Não sei como fazer este redirecionamento no web.config, mas se for usar o .htaccess voce pode colar este comando no seu arquivo e o redirecionamento sera feito:
      # default index file
      DirectoryIndex index.asp

      3. Sim, para paginas nao encontradas, voce pode usar este comando:
      ErrorDocument 404 /nome-da-pagina.html

      Qualquer outra duvida, por favor, nao deixe de postar. Espero ter ajudado.

  21. Avatar de predzaoano

    bom dia amigo, estou com dificuldades.. ja consegui ocultar a extensao .asp porem nao consigo fazer as url amigaveis funcionarem…

    1. Avatar de diegosanches
      diegosanches

      Olá Adriano,
      Terei prazer em ajuda-lo, mas preciso de mais detalhes.
      Sei que elas não funcionam, mas nao sei o que você fez para tentar faze-las funcionar. Preciso de mais detalhes.

      1. Avatar de predzaoano

        no momentou agora estou usando apenas oq consegui fazer funcionar…

        RewriteEngine on

        RewriteRule ^([^?]+)\.asp$ $1 [NC,R=301,L]

        RewriteCond %{REQUEST_FILENAME}.asp -f
        RewriteRule (.*) $1.asp

        que esta tirando a extensao asp

        meu site eh http://www.piadasparafacebook.com.br

        e as paginas tem piada.asp?pagina=1&id=2 por exemplo

        entre outras… porem com parametros parecidos…

        oq consegui apenas com essa funcao foi deixar

        http://piadasparafacebook.com.br/piadas?id=19

        tirar a extensao .asp, queria deixar http://www.piadasparafacebook.com.br/piada/titulo-da-piada

        e tbm a pagina piadas.asp q mostra as piadas por categorias deixar http://www.piadasparafacebook.com.br/piadas/categoria-da-piada

      2. Avatar de diegosanches
        diegosanches

        Olá meu amigo, bom dia.
        Eu não sei como lhe ajudar!
        Aqui no comentário você não posta nenhuma dúvida, ou problema que esteja enfrentando, apenas posta seu objetivo.
        No meu post eu explico como escrever cada uma das regras que você precisa. Estão em relação à como escrever as regras, está tudo ai em cima.
        Se tiver alguma dúvida, post aqui, terei prazer em ajudar.

  22. Avatar de junior
    junior

    olá Diego tudo bem?

    gostaria de saber como ficaria
    noticia.asp?cod=32342&codDep=234

    para deixar dessa forma
    noticias/pele-e-o-rei-do-futebol.html

    1. Avatar de diegosanches
      diegosanches

      Olá Junior, tudo bem, e contigo?

      A regra ficaria algo como:
      RewriteRule   ^/noticia/([a-zA-Z0-9_-]+)/?(.html)?$  /noticia.asp?titulo=$1 [I,L]

      Dai então na sua aplicação você recebe o atribute “titulo” via get e através de um select seleciona em seu banco de dados os atributos cod e codDep
      algo como: “SELECT cod, codDep FROM tbNoticias WHERE titulo = ” & Request.QueryString(“titulo”).

  23. Avatar de Leonardo
    Leonardo

    Diego, nunca funciona meus arquivos .htaccess, dentro do arquivo ou php ou asp tem que ter algo em especial?

    1. Avatar de diegosanches
      diegosanches

      Olá Leonardo,
      Não, não há nada que deve ser feito no php ou asp. O servidor sempre vai acessar primeiro seu arquivo de reescrita de URL (.htaccess) para depois começar a rodar suas páginas, seja lá que plataforma for.
      Se não funciona, você deve verificar algumas coisas. Primeiro verifique com sua hospedagem se o serviço de reescrita de URL está habilitado. Se esitver rodando em um servidor IIS local, você terá que fazer a instalação do ISAPI rewrite, se for apache, não se preocupe, este módulo já vem instalado.
      Depois descubra a plataforma do seu servidor (Lixus ou windoes) e versão do módulo ISAPI rewrite. Ai você vai confirmar que formato de arquivo deve usar: httpd.ini ou .htaccess.
      Se tudo isto estiver ok, creio que deva funcionar.
      Qualquer nova dúvida, pode perguntar.

      1. Avatar de Leonardo
        Leonardo

        Então no meu servidor funciona a retirada da extensão via htaccess porém a reescrita das páginas não funcionam

      2. Avatar de diegosanches
        diegosanches

        Neste caso então deve existir algum problema na escrita de suas regras. Começe com alguns testes simples descritos neste artigo, que acredito que dará certo

  24. Avatar de André
    André

    Diego, boa tarde! Desculpe incomodar, mas estou sofrendo para fazer url amigáveis em meu site. Poderia me ajudar? Preciso criar uma regra para transformar isso: http://www.meusite.com.br/index.asp?lang=PT nisso: http://www.meusite.com.br/BR/Home Consegui fazer o .htaccess reconhecer a url amigável mas não consigo deixar a URL amigável sendo exibida na barra de endereços do navegador. Ou seja, quando eu digito http://www.meusite.com.br/BR/Home, ele interpreta e muda para http://www.meusite.com.br/index.asp?lang=PT. Existe alguma regra para deixar a url exibida no navegador com o formato amigável? Ou isso só pode ser feito na programação ASP? Muito obrigado pela atenção e agradeço ainda mais se puder me ajudar. Abraços, André.

    1. Avatar de diegosanches
      diegosanches

      Hola Andre,

      Deve ter algum redirecionamento no seu .htaccess.
      Espero que tenha conseguido resolver o problema.

  25. Avatar de Leonardo Andrade

    Diego, por favor NUNCA apague está página cara.
    Tive dúvidas para criar URL’s amigáveis em 2012, e acabei desistindo. Hoje preciso novamente trabalhar com URL amigavel + ASP clássico, e esse seu post é o melhor material que tem na internet voltado para ASP clássico, sem contar que você responde nossas perguntas e nos ajuda a chegar em uma solução.

    Por enquanto só passei pra fazer um merecido elogio a você, agora vou voltar a trabalhar com as URL’s amigáveis e se eu tiver alguma dúvida eu escrevo aqui pra você. Obrigado.

    1. Avatar de diegosanches
      diegosanches

      Muito obrigado Leonardo. A ideia e sempre ajudar, como outros ja me ajudaram no passado. Portanto, sempre que precisar, so avisar.
      Obrigadao mesmo e boa sorte com as URL´s amigaveis.

  26. Avatar de Leonardo Andrade

    Olá Diego, estou com uma dúvida em relação ao redirecionamento 301.

    Tenho uma url que possui paginação, então essa url pode aparecer de duas formas, a 1ª forma é a seguinte:

    URL-1: http://www.meusite.ws/cursos/curso.asp?tipo=4

    Esse seria a forma da página acessada pela 1ª vez, mas se você clicar na página 2 da paginação, essa mesma url ficaria assim:

    URL-2: http://www.meusite.ws/cursos/curso.asp?tipo=4&pag=2&esc=1&rem=5000&reg=2

    Em relação a 1ª forma (URL-1), eu consegui fazer o redirecionamento desta forma:

    RewriteCond %{QUERY_STRING} !=””
    RewriteCond %{QUERY_STRING} ^tipo=([0-9]+)$ [NC]
    RewriteRule ^/cursos/curso\.asp(.+)$ /cursos/encerrados-%1.html? [L,R=301]

    Então, quando a pessoa clica no link URL-1 eu redireciono para:

    URL-3: http://www.meusite.ws/cursos/encerrados-4.html

    o problema é a paginação, preciso saber como faço para a url com paginação (URL-2) ficar assim:

    URL-4: http://www.meusite.ws/cursos/encerrados-4-2-1-5000-2.html

    Tentei usar [OR], porque preciso verificar que… A query string “tipo” sempre vai existir, mas a outras pode ser que existam ou pode ser que estejam vazias, ainda não consegui fazer funcionar, então dei uma travada nessa parte, será que você pode me ajudar?

    1. Avatar de diegosanches
      diegosanches

      Ola Leonardo,

      Voce pode usar simbilo ? para dizer que o parametro tipo e opcional. Algo assim:
      RewriteCond %{QUERY_STRING} ^tipo=([0-9]+)?$ [NC]

      Ou também pode escrever uma regra para cada situação e o IIS vai ver a URL que esta recebendo e vai interpreta-la de acordo com suas regras.

      Outra opção ainda seria fazer a páginação via POST, ou seja, voce pode manter um form ao final da página, e criar uma função em javascript que recebe parametros de ordenação, número de página, etc, e não vai precisar mudar as suas regras, porque será independente.

  27. Avatar de Leonardo Andrade

    Diego, uma outra dúvida em relação a redirecionamento 301, só que agora fazendo o redirecionamento direto no ASP ao invéz de fazer no .htaccess.

    Sei que para fazer o redirecionamento em ASP, o código é o seguinte:

    Response.Status = “301 Moved Permanently”
    Response.AddHeader “Location”, “http://www.meusite.ws/empresa”

    Digamos que eu queira que, quando o usuário clicar na url antiga:

    http://www.meusite.ws/institucional/empresa/empresa.asp

    ele seja redirecionado para a url:

    http://www.meusite.ws/empresa

    O problema é que se eu colocar esse código na página “empresa.asp”, ele vai cair em um loop infinito, afinal as duas url’s se tratam da mesma página.

    Como você acha que devo proceder para resolver esse problema?

    1. Avatar de diegosanches
      diegosanches

      Olá de novo Leonardo.

      Só para eu entender melhor, Porque você não pode usar o htacess para criar esta regra?

      1. Avatar de Leonardo Andrade

        Olá Diego, primeiramente obrigado pelas respostas, ainda vou testar suas sugestões e qualquer novidade eu grito aqui de novo…rs

        Então, na verdade o redirecionamento em ASP era mais para teste, por que não quero perder nenhuma url então digamos que eu tenha a seguinte url antiga no Google:

        URL-1: http://www.meusite.ws/cursos/curso.asp?tipo=4

        Quando o usuário clicar eu tenho que redirecionar ela para o seguinte link:

        URL-2: http://www.meusite.ws/cursos/encerrados-4.html

        Porém, como a URL-1 só me informa o “tipo=4” eu não tenho como saber se é da categoria “encerrados” ou “ativos”, ai eu pensei em tratar no .asp por isso, por que eu pegaria o id “tipo” e verificaria a categoria no BD para poder colocar na URL se é “encerrados” ou “ativos”.

        Mas… analisando com mais calma, imagino eu que seja possível usar um “case” ou “if” no próprio .htaccess, só não sei ainda como fazer essa condição, na verdade nem sei se é possível. Qual você acha que seria a melhor solução para esse tipo de redirecionamento?

      2. Avatar de diegosanches
        diegosanches

        Olá Leonardo,

        Desculpe pela demora, estou de mudança, sabe como e!
        Enfim, eu acho que voce poderia fazer este tratamento no ASP mesmo, como imagino que ja tinha pensado

        E em algum momento acho que voce vai entrar numa situação de redirecionamento infinito.

        A lógica seria mais ou menos esta:

        1. usuario clicou: http://www…&tipo=4
        2. Asp redireciona para http://www…encerradis-4.html

        Entramos en um loop infinito. Para evitar isto, eu faria o seguite:

        1. usuario clicou: http://www…&tipo=4
        2. URL = amigavel?
        Sim: mostra o curso
        Nao: Asp redireciona para http://www…encerradis-4.html

        Para verificar se a URL e amigavel, você pode usar uma server variable.

        Se voce executar o codigo abaixo vai ver todas as server variables que estão em tempo de execução:

        for each key in Request.Servervariables
        Response.Write key & ” = ” & Request.Servervariables(key) & “

        next

        Existe uma variavel que carrega o endereço amigavel: HTTP_X_ORIGINAL_URL. E com esta informação você pode criar o If.

        Eu preparei um exemplo de teste. Por exemplo tenho uma pagina que se chama contato.asp, mas em modo amigavel se torna contato.html.

        Clique no link abaixo e procure por “contato.html”. Ai voce vai entender melhor o que estou dizendo.

        http://www.transitoagorasp.com.br/contato.html?a=1

        Espero ter ajudado.

  28. Avatar de Samuel Lima
    Samuel Lima

    Boa noite, muito bom esse post, eu ainda tento programar em asp, e gostaria de saber como deveria ficar essa linha.

    <a href="praia?id=”>

    TEntei as formas que vocÊ mostrou acima mais não consegui, é possível poder me dá uma ajuda ?

    1. Avatar de diegosanches
      diegosanches

      Hola Samuel,

      Eu sugiro que voce use a funcao que eu recomendo:

      Ficaria assim:

      <a href="<%=URLamigavel("praia.asp?id=15","","Praia")%>">Nome da Praia</a>

      E voce teria que ter uma regra para ler esta funcao:
      RewriteRule ^/praia/?([a-zA-Z0-9_-]+)?(.html)?$ /praia.asp?id=15 [I,L]

      Sua URL ficaria:
      http://www.site.com.br/praia/15.html

      Caso isto nao ajude, por favor me indique todas as formas que voce tentou para eu entender melhor a duvida.

      Abracos

      1. Avatar de Samuel Lima
        Samuel Lima

        Muito Obrigado Diego consegui fazer, valeu de verdade.

        Mais uma perguntinha, eu conseguir deixar a url assim http://www.meusite.com.br/praia/2/testando-costa-do-descobrimento.html

        O 2 representa a id e o restante o título, tem como sumir o 2 que representa o id e deixar somente o titulo ?

      2. Avatar de diegosanches
        diegosanches

        Sim Samuel, é possivel, mas ai voce teria que fazer uma funcao em ASP que identifique o titulo, e te retorne um ID ou todo o registro da praia. Por exemplo:

        Voce deve ter isso em alguma parte de sua pagina:

        “SELECT * FROM praia WHERE id = 2”

        Dai voce teria que mudar isto para

        “SELECT * FROM praia WHERE titulo = ‘”Request.QueryString(“Titulo”)”‘”

        E ai voce pode tirar o numero dai:
        RewriteRule ^/praia/?([a-zA-Z0-9_-]+)?(.html)?$ /praia.asp?titulo=$titulo [I,L]

        e no ASP:

        <a href="<%=URLamigavel("praia.asp?titulo=praia","","Praia")%>">Nome da Praia</a>

        Ou seja, voce sempre vai precisar de uma referencia nesta URL, para seu registro no banco de dados. Esta referencia pode ser um ID, um titulo, um codigo, qualquer parametro, mas pelo menos 1, voce tera que ter.

      3. Avatar de Samuel Lima
        Samuel Lima

        Diego, caso eu faça isso, se por acaso eu tiver 2 títulos com o mesmo nome, não dará algum tipo de conflito ?

      4. Avatar de diegosanches
        diegosanches

        Sim, dará conflito. Este é o problema de nao usar uma chave primaria ou registro unico neste caso. Em outros frameworks como para ASP.NET por exemplo, seria possivel usar um componente para ter uma URL sem o ID como voce quer, e sem conflito. Mas com ASP classico já existe esta limitacao.

  29. Avatar de Samuel Lima
    Samuel Lima

    Talvez uma solução seja criar um registro chamado slug como UNIQUE no mysql, tem uma loja virtual que um amigo fez em ASP e conseguiu usar url amigável sem apresentar a ID.

    http://www.noteplace.com.br

    1. Avatar de diegosanches
      diegosanches

      Claro, a solucao aplicando un slug é PERFEITA. Muito bom! Vai servir de ideia para quem consultar o post. Valeu Samuel.

      1. Avatar de Samuel Lima
        Samuel Lima

        Blz Diego, conseguindo fazer aqui posto para ajudar a galera! Abraços.

  30. Avatar de samuelfoco

    Diego bom dia, estou de volta aqui para pedir uma ajuda, estou com um sistema que possui categoria e subcategoria, como fazer com que as url reconheçam a categoria e a subcategoria sem a necessidade no arquivo htacess eu ter que escrever o código com cada nome da categoria e subcategoria ?

    1. Avatar de diegosanches
      diegosanches

      Hola Samuel.

      Acho que nao intendi bem sua pergunta. No exemplo que uso para explicar o artigo nao é necessario especificar nome de categoria. Voce cria uma regra em seu htaccess que serve para qualquer nome, categoria, subcategoria, etc. E vai precisar de um ID ou um slug para vincular as informacoes. Mas nao há necessidade de escrever código com cada nome de categoria.

  31. Avatar de samuelfoco

    Olá Diego, olha eu aqui novamente, você poderia me ajudar mais uma vez, como ficaria a regra para essa url.

    http://localhost/samuelneto/eventos-detalhes.asp?slug=batida-entre-carro-e-caminhao-deixa-tres-feridos-na-br-367

    Observe que o slug é o unique, porém não consigo fazer com que a regra leia isso.

    Obrigado desde já!

  32. Avatar de Samuel Lima

    Olha só Diego eu consegui fazer com que ficasse assim a url http://www.meusite.com.br/esportes/1/testando-costa-do-descobrimento , onde o 1 é o ID, gostaria que ficasse assim :
    http://www.meusite.com.br/esportes/testando-costa-do-descobrimento-1

    Não vai dessa forma de jeito nenhum.

    1. Avatar de diegosanches
      diegosanches

      Hola Samuel,

      O meu artigo descreve como criar a URL exatamente como voce quer. Por favor, te peco que siga os passos do artigo, e se nao conseguir, diga o que falhou, e quais sao as duvidas. O objetivo do artigo e do blog é que as pessoas aprendam. Infelizmente nao posso estudar cada caso que me enviem e elaborar a respectiva regra, funcoes, etc. Desta forma, se voce me envia duvidas, fica mais facil de ajudar.

  33. Avatar de ronaldoeler

    Olá Diego, recorro novamente às suas dicas pois estou com um web.config de um guia um pouco complicado de resolver. dois problemas principais:

    1 – quando dá erro (400 ou 500), não redireciona para a página _erros.asp (onde faço o tratamento e envio um e-mail pra saber o que deu errado). Ja tentei de várias formas:

    e com custom errors, mas, nada funcionou.

    2 – na minha página de pesquisa, tenho a regra:

    e funciona muito bem, mas somente quando a pessoa digita algo no campo… se estiver em branco, dá erro 404. O que fazer?

    Obrigado!

    1. Avatar de diegosanches
      diegosanches

      Olà Ronaldo,

      As formas que voce ja tentou usar nao saiu aqui no comentario. E tambem nao sei como esta seu web.config. Mas de maneira geral, deveria estar algo semelhante a isto:

      Voce tambem pode fazer estas configuracoes em sua hospedagem. Nao sei como è seu painel, mas em alguma parte deve ter uma opçao para configurar paginas de erros personalizadas.

      1. Avatar de ronaldoeler

        o que vc postou também nao saiu no comentário… bem eu, dentro do painel tentei colocar a página _erros.asp, mas sem sucesso, aparece erro interno no servidor. Se coloco um 404.htm, vai tranquilo. Se eu executo a página _erros.asp sozinha, tbm funciona, não estou entendendo onde está o problema.

        No meu web.config, tentei diversas formas, sem sucesso. A última foi:

        httpErrors errorMode=”DetailedRemoteOnly”>
        remove statusCode=”500″ subStatusCode=”-1″ />
        remove statusCode=”404″ subStatusCode=”-1″ />
        error statusCode=”404″ prefixLanguageFilePath=”” path=”/404.htm” responseMode=”File” />
        error statusCode=”500″ prefixLanguageFilePath=”” path=”/_error.asp” responseMode=”ExecuteURL” />
        /httpErrors>

      2. Avatar de diegosanches
        diegosanches

        Ola Ronaldo. O que voce fez me parece super certo, deveria funcionar. Entao o que posso imaginar e que talvez o custom error de seu servidor nao esteja habilitado, ou com algum problema. Acho que voce tem 2 caminhos:

        1. Entrar em contato com o suporte do seu servidor para ver se existe algum problema na configuracao de custom errors.

        2. Instalar sua aplicaçao localmente, assim voce pode provar fazendo alteraçoes no IIS atè encontrar que configuracao esta faltando.

        Acredito que este link pode te ajudar:
        http://www.iis.net/configreference/system.webserver/httperrors

Deixar mensagem para Juliano Cancelar resposta

Eu sou o Diego

Bem vindo ao meu website. Sim, aqui falamos sobre technologia. Simplesmente simples, fazendo o que se deve fazer em uma vida saudável, fazer tudo aquilo que gosta.

Vamos conectar!