我在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
:
注释
with https
,也会遇到302错误的循环。 您如何看待这个问题?问题出在哪里?
答案 0 :(得分:0)
问题的原因是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选项:
如果当前设置为“灵活”,则在原始Web服务器上配置了SSL证书的情况下更新为“完全”。 (不推荐)如果当前设置为“完全”,则更新为“灵活”。
答案 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);
}
}
}