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.

  1. Inicie el administrador de IIS y, a continuación, haga clic en Sitio web predeterminado.

  2. En el panel Acciones, haga clic en Enlaces y agregue un nuevo enlace HTTP para el puerto 8088.

    Captura de pantalla del cuadro de diálogo Enlaces de sitio después de hacer clic en Enlaces en Editar sitio en el panel Acciones.Ilustración 1: adición de un nuevo enlace

  3. 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).

  4. Guarde el archivo hosts.

  5. 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 y http://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:

  1. Inicie el administrador de IIS.

  2. A la izquierda, en el panel Conexiones, seleccione Sitio web predeterminado.

  3. A la derecha, en Vista características, haga clic en Reescritura de dirección URL.

    Captura de pantalla del panel Inicio del sitio web predeterminado con la opción U R L Rewrite seleccionada.

    Ilustración 2: haga clic en Reescritura de dirección URL

  4. A la derecha, en el panel Acciones, haga clic en Importar reglas.

  5. Copie las reglas de mod_rewrite de ejemplo anteriores y péguelas en el cuadro de texto Reglas de reescritura.

    Captura de pantalla del panel Importar reglas de subrayado mod con un conjunto de reglas de reescritura y un conjunto de reglas convertidas correctamente.

    Ilustración 3: reglas para importar

  6. 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.

    Captura de pantalla de alternancia entre la vista de árbol y la vista X M L en la sección Reglas convertidas.

    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.

    Captura de pantalla de un nodo seleccionado en la vista árbol de las reglas convertidas.

    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.

    Captura de pantalla de hacer clic con el botón derecho en una regla convertida para cambiar el nombre de la regla.

    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.

    Captura de pantalla del panel Acciones con Aplicar, Cancelar y Volver a reglas resaltadas.

    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.