为什么IIS重写为HTTPS会导致301错误循环?

时间:2019-10-29 13:56:34

标签: asp.net-mvc iis url-rewriting iis-8

我在Asp.net MVC网站的web.config中具有以下规则。

启用此规则会导致301错误循环!

<rule name="Redirect to https" enabled="true" patternSyntax="Wildcard" stopProcessing="true">
    <match url="*" negate="false" />
    <conditions logicalGrouping="MatchAny">
            <add input="{HTTPS}" pattern="OFF" />
    </conditions>
    <action type="Redirect" url="https://{HTTP_HOST}{REQUEST_URI}" redirectType="Permanent" />
 </rule>

使用CURL测试网站网址without https

enter image description here

注释

  • 启用规则后,即使尝试使用URL with https,也会遇到302错误的循环。
  • 我在网站上使用Cloudflare SSL

您如何看待这个问题?问题出在哪里?

2 个答案:

答案 0 :(得分:0)

问题的原因是Cloudflare SSL / TLS应用程序“概述”选项卡中的“灵活SSL加密”模式通过HTTPS加密了浏览器和Cloudflare网络之间的流量。但是,启用“灵活SSL”选项后,Cloudflare会通过HTTP未经加密将请求发送到原始Web服务器。如果将原始Web服务器配置为在使用“灵活SSL”选项时将所有HTTP请求重定向到HTTPS,则会发生重定向循环。 使用“完全”或“完全(严格)SSL”选项时,重定向循环也可能发生。唯一的区别是Cloudflare通过HTTPS与您的原始Web服务器联系,并且如果您的原始Web服务器将HTTPS请求重定向到HTTP,则会发生重定向循环。

要解决重定向循环问题,您可以从下面引用任何选项:

  1. 从原始Web服务器配置中删除HTTP到HTTPS重定向。

  2. 更新“ SSL / TLS应用程序的概述”选项卡中的Cloudflare SSL选项:

如果当前设置为“灵活”,则在原始Web服务器上配置了SSL证书的情况下更新为“完全”。 (不推荐)如果当前设置为“完全”,则更新为“灵活”。

Troubleshooting redirect loop errors

答案 1 :(得分:0)

试试这个:

          public class SSLFilter : ActionFilterAttribute {

          public override void OnActionExecuting(ActionExecutingContext filterContext){
    if (!filterContext.HttpContext.Request.IsSecureConnection){
        var url = filterContext.HttpContext.Request.Url.ToString().Replace("http:", "https:");
        filterContext.Result = new RedirectResult(url);
    }
}

}