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:
- IIS 7.0 ou superior com serviço de função do ASP.NET habilitado
- 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":
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":
Use a ação "Adicionar..." para adicionar as variáveis de servidor HTTP_COOKIE e ORIGINAL_URI à lista "Variáveis de servidor permitidas":
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":
Clique em "Adicionar mapa de reescrita..." e especifique o nome do mapa como "Idiomas":
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:
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:
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:
- 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
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".