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.
Abra o Gerenciador do IIS e selecione Site Padrão.
No painel Ações, selecione Associações e adicione uma nova associação http para a porta 8088.
Figura 1: adicionar uma nova associação
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).
Salve o arquivo hosts.
Verifique se os nomes de host foram configurados corretamente abrindo um navegador e acessando os sites
http://www_mysite_com/iisstart.htm
ehttp://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:
Inicie o Gerenciador do IIS.
À esquerda, no painel Conexões, selecione Site Padrão.
À direita, no Modo de Exibição de Recursos, escolha Reescrita de URL.
Figura 2: selecionar em Reescrita de URL
À direita, no painel Ações, selecione Importar Regras.
Copie as regras mod_rewrite do exemplo acima e cole-as na caixa de texto Regras de reescrita.
Figura 3: regras para importação
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.
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.
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.
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.
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.