Usando do Módulo de Reescrita de URL

por Ruslan Yakushev

Sobre o Módulo de Reescrita de URL

O Módulo de Reescrita de URL 2.0 da Microsoft para IIS 7 e superior permite que os administradores do IIS criem regras personalizadas avançadas para mapear URLs de solicitação para URLs amigáveis que são mais fáceis de lembrar e mais fáceis para os mecanismos de pesquisa localizarem. Você pode usar o módulo de Reescrita de URL para executar tarefas de manipulação de URL, algumas das quais incluem:

  • Definir regras avançadas para transformar URLs complexas em endereços Web simples e consistentes.
  • Substituir facilmente as URLs do aplicativo Web para produzir resultados amigáveis do usuário e do mecanismo de pesquisa.
  • Reescrever URLs com base em cabeçalhos HTTP e variáveis de servidor IIS.
  • Executar redirecionamentos, enviar respostas personalizadas ou interromper solicitações HTTP com base na lógica expressa nas regras de reescrita.
  • Controlar o acesso ao conteúdo de sites da Web com base em segmentos de URL ou metadados de solicitação.

O módulo de Reescrita de URL está disponível como um download que você pode instalar em seu próprio servidor IIS e na plataforma de nuvem dos Sites da Web do Azure da Microsoft.

Recursos da Reescrita de URL 2.0

O módulo da Reescrita de URL 2.0 da Microsoft inclui os seguintes principais recursos:

  • Mecanismo de reescrita de URL baseada em regras. As regras de reescrita definem a lógica usada para analisar URLs de solicitação e mapeá-las para reescrever as URLs quando a URL da solicitação corresponder a uma regra definida. Os administradores do servidor Web e do site podem usar conjuntos de regras de reescrita para definir a lógica de reescrita de URL.
  • Padrões correspondentes de expressão regular. As regras de reescrita podem usar a sintaxe de expressão regular para padrões correspondentes, conforme definido naECMA-262.
  • Padrões correspondentes curinga. As regras de reescrita podem usar a sintaxe curinga para padrões correspondentes.
  • Regras de reescrita globais e distribuídas. A Reescrita de URL usa regras globais para definir a lógica de reescrita de URL em todo o servidor. Essas regras são definidas no arquivo applicationHost.config e substituem as regras configuradas em níveis inferiores na hierarquia de configuração. O módulo também usa regras distribuídas para definir a lógica de reescrita de URL específica para um escopo de configuração específico. Esse tipo de regra pode ser definido em qualquer nível de configuração usando arquivos Web.config.
  • Acesso a variáveis de servidor e cabeçalhos HTTP. Variáveis de servidor e cabeçalhos HTTP fornecem informações adicionais sobre as solicitações HTTP atuais. Essas informações podem ser usadas para configurar regras de reescrita ou para compor a URL de saída.
  • Várias ações de regra. Em vez de reescrever uma URL, uma regra pode executar outras ações, como emitir um redirecionamento HTTP, anular a solicitação ou enviar um código de status personalizado para clientes HTTP.
  • Suporte para o cache de saída do modo de kernel do IIS e do modo de usuário. O cache de saída do IIS fornece melhorias significativas de desempenho para aplicativos Web. O módulo de Reescrita de URL é totalmente compatível com ambos os tipos de cache de saída. Isso significa que é possível armazenar respostas em cache com segurança para URLs reescritas e, portanto, aumentar o desempenho de aplicativos Web que dependem da reescrita de URL.
  • Funções de manipulação de cadeia de caracteres. As funções internas de manipulação de cadeia de caracteres podem ser usadas para converter URLs em minúsculas e para executar codificação e decodificação de URL.
  • Mapas de Reescrita. Um mapa de reescrita é uma coleção arbitrária de pares nome-valor. Você pode usar um mapa de reescrita dentro de regras de reescrita para gerar a URL de substituição. Os mapas de reescrita são particularmente úteis quando você tem um grande conjunto de regras de reescrita, todas elas usando cadeias de caracteres estáticas (ou seja, padrões correspondentes não são usados). Nesses casos, em vez de definir um grande conjunto de regras de reescrita simples, você pode colocar todos os mapeamentos entre o mapa de reescrita usando a URL de entrada como chave e a URL de substituição como valor. Em seguida, você pode ter uma regra de reescrita que faz referência ao mapa de reescrita para pesquisar a URL de substituição com base na URL de entrada.
  • Suporte ao rastreamento de solicitação com falha. O rastreamento de solicitação com falha do IIS pode ser usado para solucionar erros relacionados à reescrita de URL.
  • Modelos de regra. Um modelo de regra é uma extensão para a interface do usuário do módulo de Reescrita de URL que simplifica a criação de regras de reescrita para uma tarefa específica. O módulo inclui três modelos de regra e também dá suporte à conexão de qualquer número de modelos personalizados.
  • Interface do Usuário para testar padrões de expressão regular e de caractere curinga. Uma interface do usuário para testar padrões de regra é fornecida com o módulo. Usando a interface do usuário, você pode verificar rapidamente os resultados de uma expressão regular ou padrão curinga em uma regra de reescrita. Você também pode usar a interface do usuário para solucionar problemas e depurar problemas relacionados a padrões correspondentes.
  • Interface do usuário para gerenciar regras de reescrita e mapas de reescrita. As regras de reescrita e os mapas de reescrita podem ser adicionados, removidos e editados usando o Módulo de Reescrita de URL do Gerenciador do IIS.
  • Interface do usuário para importar regras de mod_rewrite. O módulo de Reescrita de URL inclui uma interface do usuário para converter regras de reescrita do formato mod_rewrite para um formato IIS.

Onde obter o módulo de Reescrita de URL

Para obter mais informações e baixar o módulo, consulte a home page da extensão da Reescrita de URL.

Atualização da versão Go Live

Se você já tiver a versão Go Live do módulo de reescrita de URL instalada, o pacote de instalação o atualizará para a Reescrita de URL versão 2.0. Todas as regras de reescrita nos arquivos ApplicationHost.config e Web.config serão preservadas.

Atualização do ASP.NET

O pacote do instalador do módulo de Reescrita de URL inclui uma atualização do ASP.NET que corrige bugs específicos do ASP.NET para o módulo de Reescrita de URL. Especificamente, a atualização contém correções para os seguintes bugs:

  1. O operador ~ no controle do servidor Web do ASP.NET é resolvido incorretamente ao usar a Reescrita de URL.
  2. A propriedade SiteMap.CurrentNode do ASP.NET retorna null quando o mapa do site contém URLs virtuais.

A atualização será aplicada somente se o computador em que o módulo de Reescrita de URL sendo instalado tiver o .NET Framework versão 3.5 SP1 ou superior. Se você instalar a versão necessária do .NET Framework depois de instalar o módulo de Reescrita de URL, poderá aplicar a atualização do ASP.NET executando o instalador do módulo de Reescrita de URL e selecionando a opção Reparar na caixa de diálogo do instalador.

Para obter mais detalhes sobre esses e outros problemas do ASP.NET relacionados à Reescrita de URL, consulte Reescrita de URL para ASP.NET Web Forms.

Usando o módulo

Estes artigos abordam a funcionalidade do Módulo de Reescrita de URL e explicam como usá-lo para implementar cenários comuns de reescrita de URL.

Aprendendo as noções básicas

Referências e diretrizes

Passo a passo em vídeo

Alterações desde a versão Go Live

As seguintes adições, alterações e correções de bug importantes foram feitas no módulo de reescrita de URL desde a versão Go Live:

  1. Adicionadas as funções de manipulação de cadeia de caracteres UrlEncode e UrlDecode.
  2. Acesso fornecido a uma URL original bruta por meio da variável de servidor UNENCODED_URL. Essa variável de servidor agora contém a URL codificada bruta exatamente como foi solicitada pelo navegador da Web.
  3. Adicionada uma interface do usuário para configurar regras de reescrita para o Application Request Routing (ARR).
  4. Adicionado suporte para a atualização in-loco da versão Go Live do módulo de reescrita de URL.
  5. Adicionada uma funcionalidade para limpar o cache interno para evitar o uso excessivo de memória ao armazenar regras de reescrita em cache.
  6. Correção de um bug relacionado à reescrita de URLs que contêm caracteres não ASCII.
  7. Correção de um bug no processamento de expressões regulares que fazia com que intervalos de caracteres fossem avaliados incorretamente para padrões que não diferenciam maiúsculas de minúsculas.
  8. Incluída uma atualização para o módulo FastCGI do IISno pacote do instalador.
  9. Incluída uma atualização para System.Web.dll no pacote do instalador.
  10. Incluída uma atualização para a função SetUri do IIS no pacote do instalador.

Problemas conhecidos

  1. As regras mod_rewrite que usam variáveis de servidor REQUEST_URI podem não funcionar corretamente quando importadas usando o recurso Regras de Importação da Reescrita de URL. Para corrigir o uso das regras importadas, você pode usar qualquer editor de texto para abrir o arquivo Web.config que contém essas regras. Localize a seção <rewrite> e, nessa seção, substitua todas as instâncias da cadeia de caracteres "{SCRIPT_NAME}" pela cadeia de caracteres "{URL}".
  2. A autenticação Digest não pode ser usada com o módulo de Reescrita de URL.
  3. A autenticação do ASP.NET Forms usa a URL reescrita para redirecionamento. Por exemplo, se a URL solicitada for "/article.htm" e o módulo de Reescrita de URL reescreve a URL como "/article.aspx", que é protegida pela autenticação do Forms, o ASP.NET redirecionará para "/login.aspx?ReturnUrl=%2Farticle.aspx".
  4. O modo de detecção automática na autenticação do ASP.NET Forms usa uma URL reescrita para redirecionamento. Por exemplo, se a URL solicitada for "/article.htm" e o módulo de Reescrita de URL reescrever a URL como "/article.aspx", que é protegida pela autenticação do Forms, o ASP.NET redirecionará para "/article.aspx? AspxAutoDetectCookieSupport=1".
  5. O modo UseUri na autenticação do ASP.NET Forms usa a URL reescrita para redirecionamento. Por exemplo, se a URL solicitada for "/article.htm" e o módulo de Reescrita de URL reescrever a URL como "/article.aspx", que é protegida pela autenticação do Forms, o ASP.NET redirecionará para "/(S(vy2ebt45imfkmjjwboow3l55))/article.aspx".
  6. O ASP.NET reescreve de volta para a URL original ao usar a autenticação baseada em URI ou o estado de sessão sem cookies. Por exemplo, quando uma solicitação é feita para "/(S(vy2ebt45imfkmjjwboow3l55))/article.htm" e o módulo de reescrita de URL reescreve "/article.htm" como "/article.aspx", o ASP.NET reescreverá a URL de volta para "/article.htm", o que pode resultar em um erro "404 – Arquivo não encontrado".
  7. O módulo DefaultDocument do IIS pode redirecionar para uma URL reescrita quando o módulo de Reescrita de URL reescrever para uma pasta. Por exemplo, se a URL de substituição em uma regra de reescrita for "/folder1/folder2" e essas pastas existirem no sistema de arquivos e tiverem um documento padrão configurado, o módulo DefaultDocument redirecionará os clientes Web para "/folder1/folder2/", expondo assim a URL reescrita. Para evitar que isso aconteça, use "/" no final da URL de substituição ao reescrever para uma pasta, por exemplo, "/folder1/folder2/"