2009-10-08 23 views
33

Estoy intentando volver a escribir las direcciones URL de la forma:Reescritura de URL https: // http: // en IIS7

https://example.com/about 

a la forma

http://example.com/about 

usando IIS7 URL rewriting:

<!-- http:// to https:// rule --> 
<rule name="ForceHttpsBilling" stopProcessing="true"> 
    <match url="(.*)billing/(.*)" ignoreCase="true" /> 
    <conditions> 
    <add input="{HTTPS}" pattern="off" ignoreCase="false" /> 
    </conditions> 
    <action type="Redirect" redirectType="Found" url="https://{HTTP_HOST}{REQUEST_URI}" /> 
</rule> 

<!-- https:// to http:// rule -->  
<rule name="ForceNonHttps" stopProcessing="true"> 
    <match url="(.*)billing/(.*)" ignoreCase="true" negate="true" /> 
    <conditions> 
     <add input="{SERVER_PORT}" pattern="^443$" /> 
    </conditions> 
    <action type="Redirect" redirectType="Found" url="http://{HTTP_HOST}{REQUEST_URI}" /> 
</rule> 

Estoy perdido; He estado navegando por la web en busca de ejemplos y probando cada sintaxis que se me ocurre. Las reglas de reescritura que especifico simplemente no parecen funcionar en todo para cualquier solicitud https, como si todas las solicitudes https:// fueran absolutamente invisibles para el motor de reescritura.

reglas funcionan bien; ver respuesta a continuación.

+0

Huele como una 'característica' de seguridad rudimentaria –

+0

Esto me huele a una pregunta de error de servidor ... –

+0

@Charlie, no.Esta es una de esas preguntas que es tanto de codificación como de administración, así que déjelo en el sitio en el que comenzó (como muchas preguntas de scripting) –

Respuesta

25

Resulta que Tenía puerto: 443 vinculado a un sitio web diferente!

Las reglas de reescritura anteriores funcionan bien para http: // a https: // reescritura y viceversa, aunque podría haber formas más óptimas o simples de hacerlo.

dejando esta pregunta aquí para que los futuros viajeros la encuentren, ya que no vi muchos buenos ejemplos de https: // para http: // escenario de reescritura en la web.

+1

Ouch. Bang Head aquí. O –

+1

Descubrí que con la regla https to http anterior resultaba que todos mis recursos CSS, JavaScript y de imagen en mis páginas https se estaban obteniendo como http. Retiré esta regla y agregué una regla de salida para reescribir las etiquetas a href en mis páginas seguras para que sean http: // {HTTP_HOST}/{R: 0} para forzar el cambio de https a http. No detecta la navegación manual inadvertida a páginas no seguras usando https, pero eso está bien para mí –

+0

Pat James, tengo este problema también. ¿Te importaría compartir tu regla de salida? – StronglyTyped

1

Su solución funciona, pero el problema es: su segunda instrucción matar la primera instrucción para cualquier enlace no es (.) billing/(.), incluyendo sus css, js e imágenes.

Puede utilizar esta regla de HTTPS a http:

<rule name="HTTPS to HTTP redirect" stopProcessing="true"> 
<match url="(.*)" /> 
<conditions> 
<add input="{RequiresSSL:{R:1}}" pattern="(.+)" negate="true" /> 
<add input="{HTTPS}" pattern="on" ignoreCase="true" /> 
<add input="{REQUEST_URI}" pattern="^(.+)\.(?!aspx)" negate="true" /> 
</conditions> 
<action type="Redirect" redirectType="Found" url="http://{HTTP_HOST}/{R:1}" /> 
</rule> 
5

Este post es un poco viejo, pero quería responder. Estoy usando ASP.Net MVC3, y la respuesta anterior de Fabio no funcionó para mí. La solución más fácil que se me ocurrió para manejar el https redirigen a http, al tiempo que permite páginas https válidos para solicitar contenido seguro se acaba de añadir reglas de lista blanca por encima de mi HTTPS/HTTP vuelve a dirigir:

<rule name="WhiteList - content folder" stopProcessing="true"> 
     <match url="^content/"/> 
     <conditions logicalGrouping="MatchAll" trackAllCaptures="false"/> 
     <action type="None"/> 
    </rule> 
    <rule name="Redirect to HTTPS" stopProcessing="true"> 
     <match url="(.*)billing/(.*)" ignoreCase="true" /> 
     <conditions> 
     <add input="{HTTPS}" pattern="^OFF$" /> 
     </conditions> 
     <action type="Redirect" url="https://{HTTP_HOST}/billing/" redirectType="SeeOther" /> 
    </rule> 
    <rule name="ForceNonHttps" stopProcessing="true"> 
     <match url="(.*)billing/(.*)" ignoreCase="true" negate="true" /> 
     <conditions> 
     <add input="{SERVER_PORT}" pattern="^443$" /> 
     </conditions> 
     <action type="Redirect" redirectType="Found" url="http://{HTTP_HOST}{REQUEST_URI}" /> 
    </rule> 
0

favor en primer lugar considerar vinculante https a su sitio web para hacer más adelante vuelven a dirigir al módulo de trabajo es esencial (para obligar a su aplicación web con un o certificado autofirmado válido)

parte final en web.config para redireccionar https a http:

<rewrite> 
    <rules> 
     <rule name="Force NonHTTPS" stopProcessing="true"> 
      <match url="(.*)" /> 
      <conditions> 
       <add input="{HTTPS}" pattern="on" /> 
      </conditions> 
      <action type="Redirect" url="http://{HTTP_HOST}/{REQUEST_URI}" /> 
     </rule> 
    </rules> 
</rewrite> 

si necesita la interfaz gráfica de usuario de IIS equivalente en el módulo de reescritura ver más abajo la imagen

enter image description here

fuente: buscar tech-net para más detalle y guía paso a paso.

+0

vea también esta publicación https://serverfault.com/q/292374/105675 –

Cuestiones relacionadas