
Tengo que redirigir una URL completa de HTTP a HTTPS para una aplicación Angular que debe alojarse en un servidor IIS.
Creé las siguientes reglas, pero no funciona, solo funciona con el dominio principal (comohttp://www.algúndominio.com, redirige muy bien, pero conhttp://www.algúndominio.com/ruta
Aquí están mis reglas. ¿Qué estoy haciendo mal?
<rules>
<rule name="HTTP to HTTPS redirect" stopProcessing="true">
<match url="(.*)" />
<conditions>
<add input="{HTTPS}" pattern="off" ignoreCase="true" />
</conditions>
<action type="Redirect" redirectType="Found" url="https://{HTTP_HOST}/{R:1}" />
</rule>
<rule name="Angular Routes" stopProcessing="true">
<match url=".*" />
<conditions logicalGrouping="MatchAll">
<add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />
<add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" />
</conditions>
<action type="Rewrite" url="./index.html" />
</rule>
</rules>
La idea es redirigirhttp://www.algúndominio.com/ruta/algoohttp://algúndominio.com/ruta/algoahttps://www.algúndominio.com/ruta/algo
Respuesta1
Hay varias formas de realizar la misma redirección. Si está utilizando url="https://{HTTP_HOST}/{R:1}", debe agregar appendQueryString="true", de lo contrario no se agregará la ruta URI.
Entonces la configuración debería verse así:
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<system.webServer>
<rewrite>
<rules>
<rule name="Redirect to HTTPS" enabled="true" stopProcessing="true">
<match url="(.*)" />
<conditions>
<add input="{HTTPS}" pattern="^OFF$" />
</conditions>
<action type="Redirect" url="https://{HTTP_HOST}/{R:1}" appendQueryString="true" />
</rule>
</rules>
</rewrite>
</system.webServer>
</configuration>
Pero normalmente uso otra regla con redireccionamiento 301 que los navegadores manejan mejor en algunas condiciones. En tal caso deberá utilizar otro tipo de uri: url="https://{HTTP_HOST}{REQUEST_URI}"
<configuration>
<system.webServer>
<rewrite>
<rules>
<rule name="HTTPS force" enabled="true" stopProcessing="true">
<match url="(.*)" />
<conditions>
<add input="{HTTPS}" pattern="^OFF$" />
</conditions>
<action type="Redirect" url="https://{HTTP_HOST}{REQUEST_URI}" redirectType="Permanent" />
</rule>
</rules>
</rewrite>
</system.webServer>
</configuration>
Respuesta2
Lo estás haciendo bien, pero IIS tiene su caché por cable, por lo que a veces no ves los cambios de inmediato; hasta donde recuerdo, de alguna manera puede sobrevivir a iisreset. Además, se detectó que Google Chrome recuerda las redirecciones.
Entonces la sugerencia es esperar un poco o reiniciar ambas máquinas (suena loco, lo sé)
Aquí está mi configuración de trabajo. Misma idea pero diferente condición.
<rules>
<rule name="http to https" stopProcessing="true">
<match url="(.*)" />
<conditions>
<add input="{SERVER_PORT}" pattern="443" negate="true" />
<add input="{HTTP_HOST}" pattern="\.local$" negate="true" />
<add input="{URL}" pattern="/robots.txt" negate="true" />
</conditions>
<action type="Redirect" url="https://{HTTP_HOST}/{R:1}" />
</rule>
</rules>