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

Asp.net mvc 为什么IIS重写为HTTPS会导致301错误循环?,asp.net-mvc,iis,url-rewriting,iis-8,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">

我在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>

注释

  • 当规则被启用时,即使我尝试使用https的URL
    ,我也会收到相同的302个错误循环
  • 我在我的网站上使用Cloudflare SSL

你对这个问题怎么看?问题出在哪里?

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

要解决重定向循环问题,您可以参考以下任何选项:

  • 从原始web服务器配置中删除HTTP到HTTPS重定向

  • 更新SSL/TLS应用程序概述选项卡中的Cloudflare SSL选项:

  • 如果当前设置为Flexible,则如果在源web服务器上配置了SSL证书,则更新为Full。 (不推荐)如果当前设置为“完全”,则更新为“灵活”

    试试这个:

              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);
        }
    }
    

    }

    @RobertHarvey,如果我尝试使用Https和启用规则的URL,我会得到相同的错误,但是当我尝试使用Https和禁用重写规则的URL时,没有错误!了解实际的请求/响应,然后应该清楚原因。