Para aumentar la respuesta de LazyOne, aquí hay una versión anotada de la respuesta.
<rewrite>
<rules>
<clear />
<rule name="Redirect all requests to https" stopProcessing="true">
<match url="(.*)" />
<conditions logicalGrouping="MatchAll">
<add input="{HTTPS}" pattern="off" ignoreCase="true" />
</conditions>
<action
type="Redirect" url="https://{HTTP_HOST}{REQUEST_URI}"
redirectType="Permanent" appendQueryString="false" />
</rule>
</rules>
</rewrite>
Borre todas las demás reglas que ya se hayan definido en este servidor. Cree una nueva regla, que llamaremos "Redirigir todas las solicitudes a https". Después de procesar esta regla, ¡no procese más reglas! Coincide con todas las URL entrantes. Luego verifique si todas estas otras condiciones son verdaderas: HTTPS está APAGADO. Bueno, esa es solo una condición (pero asegúrese de que sea verdad). Si es así, envíe una redirección 301 permanente al cliente en http://www.foobar.com/whatever?else=the#url-contains
. ¡No agregue la cadena de consulta al final de eso, porque duplicaría la cadena de consulta!
Esto es lo que significan las propiedades, los atributos y algunos de los valores.
- clear elimina todas las reglas del servidor que de otro modo podríamos heredar.
- la regla define una regla.
- nombra un nombre arbitrario (aunque único) para la regla.
- stopProcessing para reenviar la solicitud inmediatamente a la canalización de solicitudes de IIS o primero para procesar reglas adicionales.
- coincidir con cuándo ejecutar esta regla.
- url un patrón contra el cual evaluar la URL
- condiciones condiciones adicionales sobre cuándo ejecutar esta regla; las condiciones se procesan solo si primero hay una coincidencia.
- logicalGrouping si todas las condiciones deben ser verdaderas (
MatchAll
) o si alguna de las condiciones debe ser verdadera ( MatchAny
); similar a AND vs OR.
- add agrega una condición que debe cumplirse.
- ingrese la entrada que una condición está evaluando; la entrada puede ser variables del servidor.
- modelar el estándar contra el cual evaluar la entrada.
- ignoreCase si la capitalización importa o no.
- acción qué hacer si el
match
y su conditions
son todos verdaderos.
- El tipo generalmente puede ser
redirect
(del lado del cliente) o rewrite
(del lado del servidor).
- url qué producir como resultado de esta regla; en este caso, concatene
https://
con dos variables de servidor.
- redirect Escriba qué redirección HTTP utilizar; Este es un 301 permanente.
- appendQueryString si se agrega o no la cadena de consulta al final de la resultante
url
; en este caso, lo estamos configurando como falso, porque {REQUEST_URI}
ya lo incluye.
Las variables del servidor son
{HTTPS}
que es ya sea OFF
o ON
.
{HTTP_HOST}
es www.mysite.com
y
{REQUEST_URI}
incluye el resto del URI, p. ej. /home?key=value
- el navegador maneja el
#fragment
(ver comentario de LazyOne).
Ver también: https://www.iis.net/learn/extensions/url-rewrite-module/url-rewrite-module-configuration-reference