MVC应用SSL故障期间,如何将HTTPS替换为HTTP消除不安全提示?
解决MVC应用SSL故障时强制跳转HTTP的方案
嗨,我来帮你搞定这个问题!当SSL出问题的时候,确实不想让用户看到那个烦人的“Not Secure”提示,咱们可以通过两种方式强制把所有HTTPS请求跳转到HTTP,具体方案如下:
方法1:通过IIS URL重写模块配置(推荐,无需改代码)
这是最直接的服务器端配置,不用动应用代码,适合有权限操作IIS的情况:
- 打开IIS管理器,找到你的目标网站
- 双击URL重写模块(如果没有这个模块,需要先安装IIS的URL重写组件)
- 点击右侧面板的添加规则,选择空白规则
- 按以下步骤配置规则:
- 规则名称:可以设为
Redirect HTTPS to HTTP - 匹配URL部分:
- 请求路径选择
Matches the Pattern - 模式填
(.*),使用Regular Expressions
- 请求路径选择
- 条件部分:
- 点击添加,条件输入填
{HTTPS},匹配类型选Matches the Pattern,模式填ON
- 点击添加,条件输入填
- 操作部分:
- 操作类型选
Redirect - 重定向URL填
http://{HTTP_HOST}/{R:1} - 重定向类型选
Found (302)(临时重定向,等SSL修复后改回HTTPS更方便,不会让浏览器缓存永久规则)
- 操作类型选
- 最后点击应用保存规则
- 规则名称:可以设为
方法2:在MVC代码中实现跳转(适合无法操作IIS的场景)
如果没权限改IIS配置,或者想在应用层面控制,可以在代码里加跳转逻辑:
针对MVC 5及更早版本(Global.asax)
打开Global.asax.cs,在Application_BeginRequest方法里添加以下代码:
protected void Application_BeginRequest() { // 检测当前请求是否是HTTPS if (Request.IsSecureConnection) { // 构建对应的HTTP地址 string httpUrl = "http://" + Request.Url.Host + Request.Url.PathAndQuery; // 执行临时重定向 Response.Redirect(httpUrl, true); } }
针对ASP.NET Core MVC(Startup.cs)
在Startup.cs的Configure方法里,添加一个自定义中间件(要放在路由相关中间件之前):
app.Use(async (context, next) => { if (context.Request.IsHttps) { // 构建HTTP格式的URL var httpUri = new UriBuilder(context.Request.Uri) { Scheme = Uri.UriSchemeHttp, Port = 80 // 如果你的网站用了非默认HTTP端口,这里改成对应端口 }.Uri; // 临时重定向到HTTP地址 context.Response.Redirect(httpUri.ToString(), permanent: false); return; } await next(); });
注意:这个中间件一定要放在
app.UseRouting()和app.UseEndpoints(...)之前,确保重定向逻辑优先执行。
几个关键提醒
- 优先用302临时重定向:等GoDaddy修复好SSL后,你要改回HTTPS,临时重定向不会让浏览器缓存永久跳转规则,避免后续用户访问异常。
- 检查表单提交:如果网站里有表单,确保表单的
action属性是HTTP格式(不过重定向后一般会自动适配,但最好确认一下)。 - 记得及时复原:等SSL问题解决后,一定要把这些重定向配置删掉,重新启用HTTPS,毕竟HTTPS才是更安全的访问方式。
内容的提问来源于stack exchange,提问作者shami sheikh
相关产品推荐
相关产品推荐

