Importar regras mod_rewrite do Apache

por Ruslan Yakushev

Introdução

O Módulo de Reescrita de URL no IIS 7 e versões posteriores disponibiliza um recurso de importação que simplifica significativamente o processo de conversão de regras mod_rewrite do Apache em regras de reescrita de URL do IIS. Neste tutorial, você usa o recurso Importar Regras fornecido no Módulo de Reescrita de URL para importar várias regras mod_rewrite para um arquivo de configuração do IIS. Se você ainda não baixou o Módulo de Reescrita de URL, poderá fazer isso em https://www.iis.net/downloads/microsoft/url-rewrite.

Configurar um cenário passo a passo

Para ver como você pode converter regras mod_rewrite e verificar se as regras convertidas funcionam corretamente, você implementará o cenário comum de imposição de nomes de host canônicos para um site. Neste exemplo, você forçará o uso de www.mysite.com, em vez de mysite.com, de modo que, ao fazer uma solicitação que use um nome de host diferente de www.mysite.com, você possa redirecionar a solicitação para um nome de host canônico.

  1. Abra o Gerenciador do IIS e selecione Site Padrão.

  2. No painel Ações, selecione Associações e adicione uma nova associação http para a porta 8088.

    Captura de tela da caixa de diálogo Ligações do Site depois de clicar em Ligações em Editar Site no painel Ações.Figura 1: adicionar uma nova associação

  3. Usando o Bloco de notas, abra %SystemDrive%\windows\system32\drivers\etc\hosts e adicione as duas linhas a seguir no final do arquivo:

    127.0.0.1 www_mysite_com
    127.0.0.1 mysite_com
    

    Observe que você está usando "_" em vez de "." como separadores de domínio. Isso é para evitar que o navegador tente resolver o nome de domínio usando um servidor de Sistema de Nomes de Domínio (DNS).

  4. Salve o arquivo hosts.

  5. Verifique se os nomes de host foram configurados corretamente abrindo um navegador e acessando os sites http://www_mysite_com/iisstart.htm e http://mysite_com/iisstart.htm.

Converter regras mod_rewrite

As regras mod_rewrite do Apache para forçar o uso de nomes de host canônicos são:

#For sites running on a port other than 80:
RewriteCond %{HTTP_HOST}   !^www_mysite_com [NC]
RewriteCond %{HTTP_HOST}   !^$
RewriteCond %{SERVER_PORT} !^80$
RewriteRule ^/(.*)         http://www_mysite_com:%{SERVER_PORT}/$1 [L,R]

#And for a site running on port 80
RewriteCond %{HTTP_HOST}   !^www_mysite_com [NC]
RewriteCond %{HTTP_HOST}   !^$
RewriteRule ^/(.*)         http://www_mysite_com/$1 [L,R]

Para converter essas regras para o formato específico de reescrita de URL do IIS:

  1. Inicie o Gerenciador do IIS.

  2. À esquerda, no painel Conexões, selecione Site Padrão.

  3. À direita, no Modo de Exibição de Recursos, escolha Reescrita de URL.

    Captura de tela do painel Início do Site Padrão com U R L Rewrite selecionado.

    Figura 2: selecionar em Reescrita de URL

  4. À direita, no painel Ações, selecione Importar Regras.

  5. Copie as regras mod_rewrite do exemplo acima e cole-as na caixa de texto Regras de reescrita.

    Captura de tela do painel Importar mod sublinhado reescrever regras com um conjunto de regras Reescrever e um conjunto de regras convertidas com êxito.

    Figura 3: regras para importação

  6. A guia Modo de Exibição de Árvore da caixa Regras Convertidas mostra instantaneamente o resultado da conversão. Você também pode selecionar a guia Modo de Exibição XML para ver como as regras são armazenadas no arquivo Web.config.

    Captura de tela da alternância entre Tree View e X M L View na seção Regras convertidas.

    Figura 4: regras convertidas

    Se você voltar para o Modo de Exibição de Árvore e selecionar um nó, a respectiva diretiva da regra mod_rewrite na caixa de texto Regras de reescrita será destacada.

    Captura de tela de um nó selecionado no Modo de Exibição em Árvore das regras convertidas.

    Figura 5: modo de exibição de árvore

    Observe que, durante a conversão de regras, foram atribuídos nomes padrão a essas regras. Para personalizar esses nomes para algo mais significativo, selecione uma regra no Modo de Exibição de Árvore, clique com o botão direito do mouse e escolha Renomear no menu contextual que aparece.

    Captura de tela mostrando o botão direito do mouse em uma regra convertida para renomear a regra.

    Figura 6: renomear

    Mude o nome da primeira regra de ImportedRule1 para Redirect to www_mysite_com:non-80. Altere o nome da segunda regra de ImportedRule2 para Redirect to www_mysite_com:80.

    No painel Ações, escolha Aplicar para salvar as regras convertidas no arquivo Web.config e selecione Voltar às regras.

    Captura de tela do painel Ações com Aplicar, Cancelar e Voltar às Regras enfatizado.

    Figura 7: voltar às regras

Testar as regras convertidas

Para testar se as regras importadas do formato mod_rewrite funcionam corretamente, abra um navegador e vá para uma das seguintes URLs:

  • http://localhost/iisstart.htm
  • http://mysite_com/iisstart.htm

Em ambos os casos, o navegador é redirecionado para http://www_mysite_com/iisstart.htm.

Além disso, se você acessar qualquer uma dessas URLs:

  • http://localhost:8088/iisstart.htm
  • http://mysite_com:8088/iisstart.htm

o navegador é redirecionado para http://www_mysite_com:8088/iisstart.htm.

Vale lembrar que as regras importadas de mod_rewrite habilitaram a imposição de nomes de host canônicos para um site. Uma pesquisa do Bing revelará outros exemplos de regras mod_rewrite do Apache.

Aviso de isenção de responsabilidade

IMPORTANTE: o Módulo de Reescrita de URL tenta converter regras mod_rewrite do Apache para regras de reescrita de URL do IIS equivalentes. No entanto, nem todas as regras mod_rewrite podem ser convertidas devido a diferenças de arquitetura entre o Apache e o IIS. É altamente recomendado que você estude um conjunto de regras mod_rewrite até entender sua funcionalidade antes de iniciar o processo de conversão. Depois de converter em regras de reescrita de URL do IIS, revise e teste o resultado da conversão para garantir que o conjunto de regras de reescrita do IIS mantém a mesma lógica de reescrita de URL.

Observe que somente as regras que seguem a sintaxe mod_rewrite do Apache podem ser convertidas. Outros formatos de regras de reescrita (como ISAPI_Rewrite, Ionic ISAPI Rewrite, IISRewrite e outros) não são reconhecidos ou serão convertidos de forma incorreta.