¿Hay una manera limpia de redirigir todos los intentos de ir a una versión HTTP: // de un sitio a su equivalente HTTPS: //?
¿Hay una manera limpia de redirigir todos los intentos de ir a una versión HTTP: // de un sitio a su equivalente HTTPS: //?
Respuestas:
Creo que la forma más limpia es como se describe aquí en IIS-aid.com . Es solo web.config y, por lo tanto, si cambia de servidor, no tiene que recordar todos los pasos que siguió con la página de error personalizada 403.4 u otros permisos especiales, simplemente funciona.
<configuration>
<system.webServer>
<rewrite>
<rules>
<rule name="HTTP to HTTPS redirect" stopProcessing="true">
<match url="(.*)" />
<conditions>
<add input="{HTTPS}" pattern="off" ignoreCase="true" />
</conditions>
<action type="Redirect" redirectType="Permanent" url="https://{HTTP_HOST}/{R:1}" />
</rule>
</rules>
</rewrite>
</system.webServer>
</configuration>
La solución más fácil y limpia que encontré fue
En Configuración SSL -> requiere SSL
En Páginas de error -> En error 403.4 -> Redirigir al sitio HTTPS
En Páginas de error -> Editar configuración de características ... -> Establecer errores detallados para solicitudes locales y páginas de error personalizadas para solicitud remota
El beneficio es que no requiere líneas adicionales de código. Lo malo es que te redirige a una URL absoluta.
Una forma limpia cambia solo el esquema de URL de http -> https y deja todo lo demás equivalente. Debe estar del lado del servidor para que no haya problemas con el navegador.
JPPinto.com tiene instrucciones paso a paso sobre cómo se hace esto, excepto que usan javascript (HttpRedirect.htm) en lugar de una redirección del lado del servidor. Por alguna razón, no pude hacer que IE ejecute javascript si tiene habilitado 'Mostrar mensajes de error HTTP amigables', que está activado de forma predeterminada. Otra cosa con el script es que la redirección a la ruta no funcionó incluso en FF o Chrome. El script siempre redirige a root. (Tal vez me haya perdido algo, porque debería redirigir a la ruta).
Por estas razones, he usado una página ASP para la redirección. La desventaja es que esto requiere que ASP clásico esté habilitado en el servidor.
OpsanBlog tiene un script ASP e instrucciones que funcionan bien con IIS6.
He tenido algunos problemas al usar este método con IIS7. Problemas de interfaz de usuario en su mayoría, ya que IIS7 hace que sea realmente fácil perderse algo.
El administrador de IIS debe mostrar el nombre del archivo en el encabezado.
Global.asax
protected void Application_BeginRequest()
{
if (!Context.Request.Url.AbsoluteUri.Contains("localhost") && !Context.Request.IsSecureConnection)
Response.Redirect(Context.Request.Url.ToString().Replace("http:", "https:"));
}
Utilizo asp clásico (intranet) y en las páginas que requieren inicio de sesión, el archivo de inicio de sesión incluye la redirección:
if Request.ServerVariables("SERVER_PORT_SECURE") <> "1" or Request.ServerVariables("HTTPS") <> "on" then
Response.Redirect "https://" & Request.ServerVariables("SERVER_NAME") & Request.ServerVariables("URL")
end if
Por supuesto, esto no incluye datos GET o POST. En efecto, es una redirección limpia a su página segura.