Definição de cabeçalhos de solicitação HTTP e variáveis de servidor do IIS

por Ruslan Yakushev

Esta seção da documentação se aplica à versão 2.0 do Módulo de reescrita de URL do IIS 7.

Este passo a passo orientará sobre como usar a versão 2.0 do Módulo de reescrita de URL para definir cabeçalhos de solicitação HTTP e variáveis de servidor do IIS.

Pré-requisitos

Esse passo a passo requer os seguintes pré-requisitos:

  1. IIS 7.0 ou superior com serviço de função do ASP.NET habilitado
  2. Módulo de reescrita de URL 2.0 instalado

Como configurar um cenário passo a passo

A fim de demonstrar como usar o Módulo de Reescrita de URL 2.0 para definir cabeçalhos HTTP e variáveis de servidor do IIS, implementaremos um cenário em que o cabeçalho do cookie HTTP na solicitação é definido com base na URL solicitada. Por exemplo, digamos que você tem um aplicativo Web que atende páginas da Web localizadas. O aplicativo Web determina o idioma da resposta com base no cookie HTTP na solicitação. O problema com essa abordagem é que os mecanismos de pesquisa não indexarão o conteúdo localizado desse aplicativo, pois os rastreadores do mecanismo de pesquisa não usam cookies HTTP e, portanto, somente o conteúdo no idioma padrão será atendido pelo aplicativo Web. Para superar esse problema, você decide adicionar informações sobre o idioma como parte da URL, por exemplo, http://www.contoso.com/default.aspx, e, em seguida, usar o Módulo de reescrita de URL 2.0 para definir o cookie que o aplicativo Web espera para determinar o idioma da resposta. Além disso, é desejável definir outra variável de servidor chamada ORIGINAL_URI que conterá a cadeia de caracteres de URI solicitada originalmente.

Para configurar o cenário passo a passo, copie o seguinte código ASP.NET e coloque-o na pasta %SystemDrive%\inetpub\wwwroot\ em um arquivo chamado language.aspx:

<%@ Page Language="C#" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
 <title>URL Rewrite Module v2 Test - Setting Server Variables</title>
</head>
<body>
 <h1>Setting HTTP request header and a server variable with URL Rewrite Module v2</h1>
 <p>The value of the Language cookie is <strong><%=( Request.Cookies["Language"] != null ) ? Request.Cookies["Language"].Value : "Cookie not set" %></strong></p>
 <p>The originally requested URI is <strong><%= HttpUtility.HtmlEncode( Request.ServerVariables["ORIGINAL_URI"] ) %></strong></p>
</body>
</html>

Depois de copiar esse arquivo, navegue até http://localhost/language.aspx e verifique se a página foi renderizada corretamente em um navegador.

Criação de uma regra de reescrita

Você criará uma regra de reescrita que reescreve URLs usando o seguinte formato:

http://localhost/<language>/anyfile.aspx
será reescrito como:
http://localhost/anyfile.aspx

A regra de reescrita também definirá duas variáveis de servidor do IIS:

  • HTTP_COOKIE
  • ORIGINAL_URI

Você criará uma regra de reescrita usando a interface do usuário de reescrita de URL no Gerenciador do IIS.

Abra o Gerenciador do IIS, escolha o "Site Padrão" no modo de exibição de árvore no lado esquerdo e, em seguida, abra o recurso "Reescrita de URL":

Screenshot of the I I S Manager's Default Web Site Home screen with a focus on the U R L Rewrite option.

Permitir que variáveis de servidor sejam alteradas

Por padrão, as regras de reescrita distribuídas (ou seja, as regras definidas para sites ou aplicativos Web específicos) não podem definir ou alterar uma variável de servidor do IIS, a menos que a variável de servidor seja adicionada à lista "Permitido". Para este passo a passo, você precisará adicionar as duas variáveis de servidor a seguir à lista "Variáveis de servidor permitidas":

  • HTTP_COOKIE
  • ORIGINAL_URI

Observação

a lista "Variáveis de servidor permitidas" não é aplicável às regras globais, que são definidas em um nível de servidor. Não será necessário adicionar uma variável de servidor à lista "Permitido" se essa variável de servidor for definida usando uma regra de reescrita global.

Selecione a ação "Exibir variáveis de servidor..." no painel "Ações":

Screenshot of the U R L Rewrite screen with a focus on the View Server Variables option in the Actions pane.

Use a ação "Adicionar..." para adicionar as variáveis de servidor HTTP_COOKIE e ORIGINAL_URI à lista "Variáveis de servidor permitidas":

Screenshot of the Add Server Variable dialog box with ORIGINAL underscore U R I entered as the Server variable name.

Depois que a lista "Variáveis de servidor permitidas" for atualizada, clique na ação "Voltar para regras" para voltar ao modo de exibição de lista de regras.

Definição do mapa de reescrita

A próxima etapa é definir um mapa de reescrita que será usado para mapear a parte da URL, representando o idioma para o identificador de localidade que será salvo pela regra de reescrita no cabeçalho de cookie HTTP.

Selecione a ação "Exibir mapas de reescrita..." no painel "Ações":

Screenshot of the U R L Rewrite screen with a focus on the View Rewrite Maps option in the Actions pane.

Clique em "Adicionar mapa de reescrita..." e especifique o nome do mapa como "Idiomas":

Screenshot of the Add Rewrite Map dialog box with Languages entered as the Rewrite map name.

Esse mapa definirá mapeamentos entre a parte de URL que representa um idioma e o identificador de localidade a ser usado ao definir o cookie de solicitação HTTP. Clique em "Editar configurações do mapa..." ação para especificar o valor padrão a ser usado quando nenhum mapeamento puder ser encontrado. Inserir "en_US" como um valor padrão:

Screenshot of the Edit Rewrite Map dialog box showing E N underscore U S as the default value to use when the key is not found in the map.

Feche a caixa de diálogo e, em seguida, use a "Adicionar entrada de mapeamento..." ação para adicionar os seguintes mapeamentos:

Valor original: Novo valor:
fr-fr fr_FR
de-de de_DE
ru-ru ru_RU

Definição da regra de reescrita

Por fim, você criará uma regra de reescrita que define as variáveis de servidor usando o mapa de reescrita definido anteriormente.

Abra a caixa de diálogo "Editar regra" clicando em ação "Adicionar regras..." no modo de exibição de recurso principal e selecionando a "Regra em branco" na categoria "Regras de entrada". Insira a configuração da regra desta forma:

Screenshot of the Edit Inbound Rule screen showing the Name, Match U R L, Conditions, Server Variables, and Actions sections.

  • Nome da regra: "definir variáveis de servidor"

  • URL solicitada: "Corresponde ao padrão"

  • Usando: "Expressões regulares"

  • Padrão: "^([a-z]{2}-[a-z]{2})/(.*)"

  • Condições:

    • Entrada: "{Languages:{R:1}}"
    • Tipo: "Corresponde aos padrões"
    • Padrão: "(.+)"
  • Ação:

    • Tipo: "Reescrever"
    • Regravar URL: "{R:2}"

O padrão da regra corresponde a todo caminho de URL que contém o segmento de idioma (por exemplo, http://www.contoso.com/de-de/default.aspx). Ele também captura o segmento de idioma e o restante do caminho da URL nas consultas anteriores da regra, para que possam ser reutilizadas posteriormente na regra. A condição de regra usa o segmento de idioma capturado anteriormente como uma chave de pesquisa que é passada para o mapa de reescrita "Idiomas". O resultado da pesquisa de mapa é armazenado na referência de consulta anterior da condição. A ação de regra reescreve a URL para não conter o segmento de idioma.

Expanda as "Variáveis de servidor..." e especifique os valores a serem usados para definir as variáveis de servidor:

Screenshot of the Server Variables dialog box with H T T P underscore COOKIE and ORIGINAL underscore U R L entered in the Name field.

  • Nome: HTTP_COOKIE, Valor: Language={C:1}
  • Nome: ORIGINAL_URI, Valor: http://{HTTP_HOST}{REQUEST_URI}

O cookie HTTP é definido usando a referência de consulta anterior da condição, que contém o identificador de localidade obtido do mapa de reescrita "Idiomas". O valor da variável de servidor ORIGINAL_URI é criado usando variáveis de servidor {HTTP_HOST} e {REQUEST_URI}.

Clique em "Ok" para fechar a caixa de diálogo e clique em "Aplicar" no painel "Ações" no lado direito para salvar a regra.

Como testar a regra

Para testar se a regra define corretamente o cookie e uma variável de servidor, abra um navegador da Web e solicite a seguinte URL:

http://localhost/fr-fr/language.aspx

Screenshot of the U R L Rewrite Module v 2 Test webpage with focus on the U R L bar, the Language cookie is set to F R underscore F R.

Será possível observar que a regra de reescrita definiu o cookie "Idioma" de acordo com a URL solicitada. Além disso, a cadeia de caracteres de URL original tornou-se acessível para a página ASP.NET por meio da variável de servidor "ORIGINAL_URI".