La mejor manera de redirigir todo HTTP a HTTPS en IIS

26

Queremos que TODOS los sitios de nuestro servidor web (IIS 10) apliquen SSL (es decir, redirijan HTTP a HTTPS).

Actualmente estamos 'Requiriendo SSL' en cada sitio y configurando un 403 errorcontrolador para realizar una 302 redirectdirección https para ese sitio específico.

Esto funciona muy bien. Pero es una tarea difícil para cada sitio, hay mucho espacio para el error humano.

Idealmente, me gustaría establecer un permanente 301 redirecten todo HTTP://*paraHTTPS://*

¿Hay una manera simple de hacer esto en IIS?

userSteve
fuente
¿No puede escribir una secuencia de comandos para realizar este cambio en cada sitio que reduciría la carga administrativa y también ayudaría a evitar errores tipográficos?
Todd Wilcox el
1
El titulo es incorrecto. Creo que estaba destinado a leer "La mejor manera de redirigir todo HTTP a HTTPS en IIS"
Mick
@ToddWilcox, ¿puede dar un ejemplo de tal secuencia de comandos?
userSteve
No use IIS

Respuestas:

40

IIS URL Rewrite Module 2.1 para IIS7 + puede ser tu amigo. El módulo se puede descargar desde IIS URL Rewrite . El uso del Módulo de reescritura de URL y la Referencia de configuración del Módulo de reescritura de URL 2.0 explica cómo utilizar el módulo.

Una vez que se instala el módulo, puede crear una redirección de todo el host utilizando el Administrador IIS. Seleccione URL Rewrite , Add Rule (s) ... y Blank rule .

Nombre:
Redirigir a HTTPS

URL de coincidencia URL
solicitada: Matches the Pattern
Uso: Wildcards
Patrón: *
Ignorar mayúsculas y minúsculas: Marcado

Condiciones
Agrupación lógica: Match Any
Entrada de condición : {HTTPS}
Verificar si cadena de entrada: Matches the Pattern
Patrón: OFF
Ignorar mayúsculas y minúsculas: Marcado
Seguimiento de captura de grupos entre condiciones: No marcado

Variables del servidor
Dejar en blanco.

Acción
Tipo de acción: Redirect
Redirigir URL: https://{HTTP_HOST}{REQUEST_URI}
Añadir cadena de consulta: Sin marcar
Tipo de redireccionamiento: Permanent (301)

Aplique la regla y ejecute IISReset (o haga clic en Reiniciar en el Administrador de IIS)

Alternativamente, después de instalar el módulo, puede modificar el archivo applicationHost.config de la siguiente manera:

<system.webServer>
  <rewrite>
    <globalRules>
      <rule name="Redirect to HTTPS" enabled="true" patternSyntax="Wildcard" stopProcessing="true">
        <match url="*" ignoreCase="true" negate="false" />
        <conditions logicalGrouping="MatchAny" trackAllCaptures="false">
          <add input="{HTTPS}" ignoreCase="true" matchType="Pattern" negate="false" pattern="OFF" />
        </conditions>
        <action type="Redirect" url="https://{HTTP_HOST}{REQUEST_URI}" appendQueryString="false" redirectType="Permanent" />
      </rule>
    </globalRules>
  </rewrite>
</system.webServer>
sippybear
fuente
¿Funcionará para redireccionamientos 301 permanentes?
userSteve
@userSteve según la respuesta anterior, puede elegir el tipo de redireccionamiento.
BE77Y
@userSteve whoops, sí, deberías poder cambiar el tipo de redireccionamiento a 301 y obtener los mismos resultados
sippybear
1
@sippybear una pregunta más: ¿qué significa input = "{HTTPS}"? ¿Debería ser {HTTP} ya que será la entrada y HTTP la salida?
userSteve
3
{HTTPS} es una variable que usted consulta para averiguar si la conexión es segura. Puede leer más sobre esto aquí: docs.microsoft.com/en-us/iis/extensions/url-rewrite-module/… En este caso, verificamos si {HTTPS} está "apagado" y luego redirigimos si es
sippybear
1

Mi investigación muestra que esta podría ser una mejor manera de redirigir:

<rewrite>
    <rules>
        <rule name="http to https" stopProcessing="true">
            <match url="(.*)" />
            <conditions>
                <add input="{HTTPS}" pattern="^OFF$" />
            </conditions>
            <action type="Redirect" url="https://{HTTP_HOST}/{R:1}" />
        </rule>
    </rules>
</rewrite>
Ángel caido
fuente
1
¿Puedes explicar por qué esto es mejor?
userSteve
Lo siento, no puedo explicarlo por mí mismo, solo leí en algunos lugares que la sintaxis es mejor.
Fallen Angel
1
¿tienes alguna fuente?
peligroso
1
Esta es exactamente la misma regla que en serverfault.com/a/893804/7184 , pero escrita con expresiones regulares y Agrupar todo. Una ventaja podría ser que la expresión de la regla usa valores predeterminados de la regla y es terser.
bzlm
Estoy en IIS 10 y la respuesta seleccionada no funcionó para mí. Por alguna razón, IIS no reconoció la sintaxis como una regla válida. Pegué tu código y funcionó de inmediato, gracias por compartir.
Jordania