2008-09-05 21 views
137

¿Existe alguna forma clara de redirigir todos los intentos de ir a una versión HTTP: // de un sitio a su HTTPS: // equivalente?IIS7: HTTP-> HTTPS Cleanly

+0

respuesta se puede encontrar en el blog de James Kovac: http://jameskovacs.com/2007/05/09/how-to-autoredirect-to-a-sslsecured-site- in-iis/ – cpuguru

+0

Si está en IIS 7 y en R2 [aquí] (http://www.jppinto.com/2010/03/automatically-redirect-http-requests-to-https-on-iis7-using- url-rewrite-2-0 /) es una guía que funciona y es la más "limpia" –

Respuesta

173

Creo que la manera más limpia es como se describe here on IIS-aid.com. Solo es web.config y si cambias de servidor no tienes que recordar todos los pasos que pasaste con la página de error 403.4 personalizada 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="Found" url="https://{HTTP_HOST}/{R:1}" /> 
     </rule> 
     </rules> 
    </rewrite> 
    </system.webServer> 
</configuration> 
+4

Esto funciona perfectamente, y para los puntos de bonificación es completamente autónomo, por lo que no tiene que crear un nuevo sitio web como se indica en la respuesta aceptada – WickyNilliams

+1

Se activará para todas las URL independientemente del tipo de archivo. p.ej. Una URL directa a un archivo txt? – Cheekysoft

+9

Esto funcionó para mí con la excepción de que tuve que modificar la URL de redireccionamiento a https: // {HTTP_HOST} {REQUEST_URI} –

-4

Creo que con "limpiamente" te refieres con un redireccionamiento de 300. Configuración para muchos servidores & idiomas here.

5

Una forma limpia solo cambia el esquema de URL de http -> https y deja todo lo demás equivalente. Debe ser del lado del servidor para que no haya problemas con el navegador.

JPPinto.com tiene Step-By-Step instructions 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 obtener IE ejecute el javascript si tiene habilitado 'Mostrar mensajes de error HTTP amigables', que está activado por defecto. Otra cosa con el script es que la redirección a la ruta no funcionaba ni en FF ni en Chrome. La secuencia de comandos siempre redirige a la raíz. (Tal vez me he perdido algo, porque debería redirigir a la ruta).

Por estas razones, he utilizado una página ASP para la redirección. La desventaja es, por supuesto, que esto requiere que ASP clásico esté habilitado en el servidor.

OpsanBlog tiene un ASP script and instructions que funciona bien con IIS6.

He tenido algunos problemas al usar este método con IIS7. La interfaz de usuario tiene problemas principalmente, ya que IIS7 hace que sea realmente fácil perder algo.

  • En primer lugar, debe instalar ASP como una función de función de servidor web .
  • En segundo lugar, el uso de un directorio virtual no funcionaba como se esperaba en IIS7 y no lo hice intento de depurar esto. En su lugar, puse el archivo en la carpeta raíz del sitio y usé la url '/SSLRedirect.asp' en la página de error 403.4 para hacer referencia a ella.
  • Por último, la parte más complicada, NO debe hacer cumplir SSL para SSLRedirect.asp. De lo contrario, obtendrá un error 403.4. Para hacerlo, seleccione el archivo en IIS7 'Vista de contenido' y cambie a 'Vista de funciones' para que pueda editar la configuración de SSL para el único archivo y desactivar la casilla 'Requerir SSL'.

IIS manager debería mostrar el nombre del archivo en el encabezado.

+1

Las instrucciones vinculadas en JPPinto.com se han actualizado para resaltar que esto no funciona en IIS 7.5 o R2. Dicen que recibirá una violación de bloqueo debido a cambios en la seguridad en las versiones más nuevas de IIS. Sugieren usar el método URL Rewrite 2.0 en su lugar (enfoque similar según la respuesta de @toxaq). – AussieRob

9

La solución más fácil y limpia que encontré fue a

  1. En Configuración de SSL -> SSL requerido

  2. En las páginas de error -> Activar 403.4 de error -> redirigida a la HTTPS sitio

  3. Páginas de error -> Editar configuración de características ...-> Establecer errores detallados de las solicitudes locales y páginas de error personalizadas para solicitud remota

La ventaja es que no requiere de líneas adicionales de código. Lo malo es que te redirige a una URL absoluta.

+0

funciona perfectamente (en IIS 8.5/2012 R2). y sin retoques con la web.config – schmendrick

+0

esta es una forma inteligente de resolver el problema. thx –

+0

¿Podría dar un ejemplo de este inconveniente? ¿En qué circunstancias sucedería y por qué es algo negativo? Si pudieras agregarlo a tu respuesta, sería genial. ¡Muchas gracias! –

0

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:")); 
} 
+0

Puedo evitar esta redirección colocando "localhost" en algún lugar del URI, p. Ej. la cadena de consulta http://tudominio.com?localhost=true Sugeriría verificar la propiedad Request.Url.Host en su lugar –