【问题标题】:Why the IIS Rewrite to HTTPS cause 301 error loop?为什么 IIS 重写为 HTTPS 会导致 301 错误循环?
【发布时间】:2020-02-24 18:41:21
【问题描述】:

我在我的 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 测试网站 url without https

注意事项

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

您对这个问题有什么看法?问题出在哪里?

【问题讨论】:

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


【解决方案1】:

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

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

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

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

如果当前设置为灵活,如果您在源 Web 服务器上配置了 SSL 证书,则更新为完整。 (不推荐)如果当前设置为 Full,请更新为 Flexible。

Troubleshooting redirect loop errors

【讨论】:

    【解决方案2】:

    试试这个:

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

    }

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-11-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-04
      • 2014-08-12
      • 2015-12-10
      相关资源
      最近更新 更多