Importación de reglas de mod_rewrite de Apache
por Ruslan Yakushev
Introducción
El módulo de reescritura de direcciones URL en IIS 7 y versiones posteriores proporciona una característica de importación que simplifica considerablemente el proceso de conversión de reglas de mod_rewrite de Apache a reglas de reescritura de direcciones URL de IIS. En este tutorial, usará la característica Importar reglas proporcionada en el módulo de reescritura de direcciones URL para importar varias reglas de mod_rewrite en un archivo de configuración de IIS. Si aún no ha descargado el módulo de reescritura de direcciones URL, puede hacerlo en https://www.iis.net/downloads/microsoft/url-rewrite.
Configuración de un escenario de tutorial
Para ver cómo puede convertir reglas de mod_rewrite y comprobar que las reglas convertidas funcionan correctamente, implementará el escenario común de aplicar nombres de host canónicos para un sitio web. En este ejemplo, forzará el uso de www.mysite.com
en lugar de mysite.com
, de modo que cuando se realice una solicitud que use un nombre de host distinto de www.mysite.com
, puede redirigir la solicitud a un nombre de host canónico.
Inicie el administrador de IIS y, a continuación, haga clic en Sitio web predeterminado.
En el panel Acciones, haga clic en Enlaces y agregue un nuevo enlace HTTP para el puerto 8088.
Ilustración 1: adición de un nuevo enlace
Con el Bloc de notas, abra
%SystemDrive%\windows\system32\drivers\etc\hosts
y agregue estas dos líneas al final del archivo:127.0.0.1 www_mysite_com 127.0.0.1 mysite_com
Tenga en cuenta que usa "_" en lugar de "." para los separadores de dominio. Esto es para evitar que el explorador web intente resolver el nombre de dominio mediante un servidor del sistema de nombres de dominio (DNS).
Guarde el archivo hosts.
Compruebe que los nombres de host se configuraron correctamente; para ello, abra un explorador web y vaya a los sitios
http://www_mysite_com/iisstart.htm
yhttp://mysite_com/iisstart.htm
.
Conversión de reglas de mod_rewrite
Las reglas de mod_rewrite de Apache que se van a usar para aplicar nombres de host canónicos son:
#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 convertir estas reglas al formato específico de reescritura de URL de IIS:
Inicie el administrador de IIS.
A la izquierda, en el panel Conexiones, seleccione Sitio web predeterminado.
A la derecha, en Vista características, haga clic en Reescritura de dirección URL.
Ilustración 2: haga clic en Reescritura de dirección URL
A la derecha, en el panel Acciones, haga clic en Importar reglas.
Copie las reglas de mod_rewrite de ejemplo anteriores y péguelas en el cuadro de texto Reglas de reescritura.
Ilustración 3: reglas para importar
La pestaña Vista de árbol del cuadro Reglas convertidas muestra al instante el resultado de la conversión. También puede hacer clic en la pestaña Vista XML para ver cómo se almacenan las reglas en el archivo Web.config.
Ilustración 4: reglas convertidas
Si vuelve a la vista de árbol y selecciona un nodo, se resaltará la directiva de regla de mod_rewrite correspondiente en el cuadro de texto Reglas de reescritura.
Ilustración 5: vista de árbol
Tenga en cuenta que durante la conversión de reglas se asignaron nombres predeterminados a las reglas. Para cambiar los nombres predeterminados a algo más significativo, seleccione una regla en la vista de árbol, haga clic con el botón derecho en ella y seleccione Cambiar nombre en el menú contextual.
Ilustración 6: cambio de nombre
Cambie el nombre de la primera regla de ImportedRule1 a Redirect to www_mysite_com:non-80. Cambie el nombre de la segunda regla de ImportedRule2 a Redirect to www_mysite_com:80.
En el panel Acciones, haga clic en Aplicar para guardar las reglas convertidas en el archivo Web.config y, a continuación, haga clic en Volver a las reglas.
Figura 7: volver a las reglas
Prueba de las reglas convertidas
Para probar que las reglas importadas del formato mod_rewrite funcionan correctamente, abra un explorador web y vaya a una de las siguientes direcciones URL:
http://localhost/iisstart.htm
http://mysite_com/iisstart.htm
En ambos casos, el explorador web se redirige a http://www_mysite_com/iisstart.htm
.
Además, si prueba cualquiera de estas direcciones URL:
http://localhost:8088/iisstart.htm
http://mysite_com:8088/iisstart.htm
el explorador web se redirige a http://www_mysite_com:8088/iisstart.htm
.
Tenga en cuenta que las reglas que se importaron desde mod_rewrite habilitaron la aplicación de nombres de host canónicos para un sitio web. Una búsqueda de Bing mostrará otros ejemplos de reglas de mod_rewrite de Apache.
Declinación de responsabilidades
IMPORTANTE: el módulo de reescritura de direcciones URL intenta convertir las reglas de mod_rewrite de Apache en reglas de reescritura de direcciones URL de IIS equivalentes funcionalmente. Sin embargo, no todas las reglas de mod_rewrite se pueden convertir debido a las diferencias arquitectónicas entre Apache e IIS. Se recomienda encarecidamente estudiar un conjunto de reglas de mod_rewrite hasta comprender su funcionalidad antes de comenzar el proceso de conversión. A continuación, después de convertir en reglas de reescritura de direcciones URL de IIS, revise y pruebe el resultado de la conversión para asegurarse de que el conjunto de reglas de reescritura de IIS correspondiente proporciona la misma lógica de reescritura de direcciones URL.
Tenga en cuenta que sólo se pueden convertir las reglas que siguen la sintaxis mod_rewrite de Apache. Cualquier otro formato de reglas de reescritura (por ejemplo, ISAPI_Rewrite, reescritura de ISAPI Ionic, IISRewrite y otros) no se reconocen o se convertirán incorrectamente.