IIs 8 将 URL 从 http 重定向到 https

Posted

技术标签:

【中文标题】IIs 8 将 URL 从 http 重定向到 https【英文标题】:IIs 8 Redirect URL from http to https 【发布时间】:2016-02-26 05:26:33 【问题描述】:

我刚刚为我的 dmain 和主机设置了 ssl。我想将我的网站限制为 https://www.example.comONLY

如果任何用户尝试打开http://example.comwww.example.comexample.comhttps://example.com,他必须被重定向到https://www.example.com

重定向必须仅针对域名。任何 URL 的其余部分将保持原样。

例如:如果用户打开example.com/dir1/page1.aspx,他必须被重定向到https://www.example.com/dir1/page1.aspx

我想使用 IIS 重写规则。

【问题讨论】:

如果你在vs中工作,在项目的App_Start文件夹中,打开FilterConfig.cs文件并添加:filters.Add(new RequireHttpsAttribute());这将使您的整个网站都需要 ssl 才能执行任何操作。 @nocturns2 不错的解决方案,但我不会解决从非 www 到 www 的重定向 不,不会。很高兴您找到了解决方案,希望您不介意我将其保存以备将来使用。谢谢! 【参考方案1】:

我通过将此代码添加到域根目录的web.config 文件中解决了这个问题。

如果第一个规则没有以www 开头,则匹配该网址 它是httphttps

如果第二条规则www 开头但它不是 https

,则它与该 url 匹配
<system.webServer>
 <rewrite>
  <rules>

    <rule name="Redirect from non www" stopProcessing="true">
      <match url=".*" />
      <conditions>
        <add input="HTTP_HOST" pattern="^example.com$" />
      </conditions>
      <action type="Redirect" url="https://www.example.com/R:0" redirectType="Permanent" />
    </rule>

    <rule name="Redirect from non https" stopProcessing="true">
      <match url=".*" />
      <conditions>
        <add input="HTTPS" pattern="^OFF$" />
        <add input="HTTP_HOST" pattern="^www.example.com$" />
      </conditions>
      <action type="Redirect" url="https://www.example.com/R:0" redirectType="Permanent" />
    </rule>

  </rules> 
 </rewrite>
</system.webServer>

【讨论】:

IIS 具有请求过滤功能,您可以在其中输入规则。我仍然需要测试您的解决方案,但我很确定它应该可以工作。过去您必须将 url 重写组件添加到 iis。 还需要添加什么才能使 web.config 中的重定向起作用?将此 xml 放入 web.config 只会使 IIS8 崩溃(500 错误 - 没有消息也没有日志) 这需要 URL 重写模块【参考方案2】:

如果您无法控制 iis 或使用托管公司不允许您更改设置的共享主机,请将其添加到您的 global.asax 文件中。

protected void Application_BeginRequest(object sender, EventArgs e)

    if (HttpContext.Current.Request.IsSecureConnection.Equals(false) && HttpContext.Current.Request.IsLocal.Equals(false))
    
        Response.Redirect("https://" + Request.ServerVariables["HTTP_HOST"] + HttpContext.Current.Request.RawUrl);
    

已编辑:

对于规范标签 (www.example.com),您无需对代码进行任何更改。 在您的 plesk 面板/odin 面板中(甚至在共享主机中)有一个设置来为您的应用程序选择默认 url。

它会自动将您的网站重定向到 www.example.com

您网站的托管设置下的设置。 选择 www 的首选域选项

【讨论】:

对于那些无法控制 iis 的人来说是一个不错的解决方案;但是将非 www 转发到 www 呢?你能把它完成吗 @shadyshrif 我已经编辑了转发到 www url 的答案。 这仅适用于 IIS7.x 吗?出于某种原因,即使在 http 请求上 IsSecureConnection 也是如此(因此它永远不会重定向到 https)。不知道为什么它不能正常工作,也许 IIS8 中有一个错误(即使不是,也要将此值设置为 true)? @MC9000 真的不知道,因为我没有在所有版本的 iis 上测试过这个,但我发现了这个bytes.com/topic/asp-net/answers/…

以上是关于IIs 8 将 URL 从 http 重定向到 https的主要内容,如果未能解决你的问题,请参考以下文章

iis url 将 http 重定向到非 www https

301 使用 IIS 重定向到具有命名锚点的 URL

通过 IIS 将 http 重定向到 https

如何从 IIS 重定向带有参数的 URL

替换IIS中域URL的一个单词

从 HTTP 重定向到 HTTPS - IIS 7.5