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

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

【问题讨论】:

标签: xml https iis-7


【解决方案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_HOST}{REQUEST_URI}
  • 这也对我有用。我必须添加我正在运行的应用程序...localhost/app1 => http://{HTTP_HOST}/app1/{R:1}
  • 对于还没有重写部分的任何人,请将规则放在 web.config 的以下部分中: ...
  • 确保在 IIS 服务器上安装了 Microsoft URL 重写模块
  • 出于 SEO 原因,您应该使用 redirectType="Permanent"。评论support.google.com/webmasters/answer/…
【解决方案2】:

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

  1. 在 SSL 设置中 -> 需要 SSL

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

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

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

【讨论】:

  • 完美运行(在 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

    【讨论】:

      猜你喜欢
      • 2011-09-15
      • 2016-03-21
      • 2015-02-13
      • 2010-12-04
      • 1970-01-01
      • 2016-11-26
      • 2011-08-26
      • 2010-10-09
      • 1970-01-01
      相关资源
      最近更新 更多