IIS7:HTTP->HTTPS 干净

Posted

技术标签:

【中文标题】IIS7:HTTP->HTTPS 干净【英文标题】:IIS7: HTTP->HTTPS Cleanly 【发布时间】:2010-09-07 23:06:18 【问题描述】:

是否有一种干净的方法可以将所有访问 HTTP:// 版本网站的尝试重定向到其 HTTPS:// 等效项?

【问题讨论】:

答案可以在 James Kovac 的博客上找到:jameskovacs.com/2007/05/09/… 如果您在 IIS 7 和 R2 上,here 是一个有效且最“干净”的指南 【参考方案1】:

我认为最干净的方法是如here on IIS-aid.com 所述。它只是 web.config,因此如果您更改服务器,您不必记住使用 403.4 自定义错误页面或其他特殊权限执行的所有步骤,它就可以正常工作。

<configuration>
  <system.webServer>
    <rewrite>
      <rules>
        <rule name="HTTP to HTTPS redirect" stopProcessing="true">
          <match url="(.*)" />
            <conditions>
              <add input="HTTPS" pattern="off" ignoreCase="true" />
            </conditions>
            <action type="Redirect" redirectType="Permanent" url="https://HTTP_HOST/R:1" />
        </rule>
      </rules>
    </rewrite>
  </system.webServer>
</configuration>

【讨论】:

这对我有用,但我必须将重定向 URL 修改为 https://HTTP_HOSTREQUEST_URI 这也对我有用。我必须添加我正在运行的应用程序...localhost/app1 => http://HTTP_HOST/app1/R:1 对于还没有重写部分的任何人,请将规则放在 web.config 的以下部分中: ... 确保在 IIS 服务器上安装了 Microsoft URL 重写模块 出于 SEO 原因,您应该使用 redirectType="Permanent"。评论support.google.com/webmasters/answer/…【参考方案2】:

我发现的最简单、最干净的解决方案是

    在 SSL 设置中 -> 需要 SSL

    在错误页面中 -> 出现 403.4 错误 -> 重定向到 HTTPS 站点

    在错误页面中 -> 编辑功能设置... -> 设置本地请求的详细错误和远程请求的自定义错误页面

好处是它不需要额外的代码行。 缺点是它会将您重定向到绝对网址。

【讨论】:

完美运行(在 IIS 8.5 / 2012 R2 上)。并且无需修改 web.config 你能举个例子来说明这个缺点吗?在什么情况下会发生,为什么它是负面的?如果您可以将其添加到您的答案中,那就太好了。非常感谢! @MarcosDimitrio 我不确定,因为那是很久以前的事了。但我相信当我的意思是将您重定向到绝对网址时,我的意思是“基本网址”。例如,“http”://mywebsite.com/hellokitty 将被重定向到“https”://mywebsite.com 从而丢失一些路径信息,这会破坏每个现有链接并带有额外的路径信息。【参考方案3】:

一种干净的方式仅将 URL 方案从 http -> https 更改为其他所有内容。它应该是服务器端的,这样就不会出现浏览器问题。

JPInto.com 有 Step-By-Step instructions 说明这是如何完成的,除了他们使用 javascript (HttpRedirect.htm) 而不是服务器端重定向。出于某种原因,如果你启用了“显示友好的 HTTP 错误消息”,我无法让 IE 运行 javascript,默认情况下它是打开的。脚本的另一件事是即使在 FF 或 Chrome 中重定向到路径也不起作用。该脚本始终重定向到根目录。 (也许我错过了一些东西,因为它应该重定向到路径。)

出于这些原因,我使用 ASP 页面进行重定向。缺点当然是这需要在服务器上启用经典的 ASP。

OpsanBlog 有一个ASP script and instructions,可以很好地与 IIS6 配合使用。

我在 IIS7 中使用这种方法时遇到了一些问题。主要是用户界面问题,因为 IIS7 很容易漏掉一些东西。

首先,您需要将 ASP 安装为 Web 服务器角色功能。 其次,使用虚拟目录并没有 在 IIS7 中按预期工作,但我没有 尝试调试这个。相反,我将文件放在站点的根文件夹中并使用 中的 url '/SSLRedirect.asp' 403.4 错误页面来引用它。 最后,最棘手的部分是,您不得为 SSLRedirect.asp 强制实施 SSL。否则你会得到一个 403.4 错误。为此,您在 IIS7 的“内容视图”中选择文件,然后切换到“功能视图”,以便您可以编辑单个文件的 SSL 设置并禁用“需要 SSL”复选框。

IIS 管理器应在标题中显示文件名。

【讨论】:

JPPinto.com 上的链接说明已更新,以强调这不适用于 IIS 7.5 或 R2。他们说,由于新版本 IIS 的安全性更改,您将遇到锁冲突。他们建议改用 URL Rewrite 2.0 方法(与@toxaq 的答案类似)。【参考方案4】:

全球.asax

protected void Application_BeginRequest()

if (!Context.Request.Url.AbsoluteUri.Contains("localhost") && !Context.Request.IsSecureConnection)
Response.Redirect(Context.Request.Url.ToString().Replace("http:", "https:"));

【讨论】:

我可以通过将“localhost”放入 URI 的某处来轻松绕过此重定向,例如查询字符串yourdomain.com?localhost=true 我建议改为检查 Request.Url.Host 属性【参考方案5】:

我使用经典的 asp(内联网)并且在需要登录的页面上登录包含文件进行重定向:

if Request.ServerVariables("SERVER_PORT_SECURE") <> "1" or Request.ServerVariables("HTTPS") <> "on" then 
    Response.Redirect "https://" & Request.ServerVariables("SERVER_NAME") & Request.ServerVariables("URL")
end if

这当然不包括 GET 或 POST 数据。所以实际上它是一个干净的重定向到您的安全页面。

【讨论】:

【参考方案6】:

我认为“干净”是指 300 重定向。为许多服务器和语言配置here。

【讨论】:

以上是关于IIS7:HTTP->HTTPS 干净的主要内容,如果未能解决你的问题,请参考以下文章

在 IIS7 中将 URL 从 https:// 重写为 http://

IIS7 http自动跳转到https

IIS 7.5 HTTP 到 HTTPS 重定向

IIS7如何实现访问HTTP跳转到HTTPS访问

如何在 MVC 应用程序(IIS7.5)中将 HTTP 重定向到 HTTPS

http到https重写太多重定向循环IIS 7