关于xml:IIS7:HTTP-> HTTPS Cleanly

关于xml:IIS7:HTTP-> HTTPS Cleanly

IIS7: HTTP->HTTPS Cleanly

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


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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<configuration>
  <system.webServer>
    <rewrite>
      <rules>
        <rule name="HTTP to HTTPS redirect" stopProcessing="true">
          <match url="(.*)" />
            <conditions>
             
            </conditions>
           
        </rule>
      </rules>
    </rewrite>
  </system.webServer>
</configuration>

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

  • 在SSL设置中->需要SSL

  • 在错误页面->关于403.4错误->重定向到HTTPS站点

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

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


    一种干净的方法仅更改http-> https中的URL方案,而使其他所有内容都等效。它应该在服务器端,这样就不会出现浏览器问题。

    JPPinto.com有关于如何完成此操作的分步说明,除了它们使用javascript(HttpRedirect.htm)而不是服务器端重定向。由于某些原因,如果您启用了"显示友好的HTTP错误消息"(默认情况下处于启用状态),则我无法让IE运行javascript。该脚本的另一件事是,即使在FF或Chrome中,重定向到路径也无法正常工作。该脚本始终重定向到root。 (也许我错过了一些东西,因为它应该重定向到path。)

    由于这些原因,我将ASP页面用于重定向。缺点当然是,这要求在服务器上启用经典ASP。

    OpsanBlog具有ASP脚本和与IIS6配合使用的说明。

    我在IIS7上使用此方法遇到了一些问题。用户界面主要是问题,因为IIS7确实很容易遗漏某些东西。

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

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


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

    1
    2
    3
    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数据。因此,实际上,这是对您的安全页面的干净重定向。


    Global.asax

    1
    2
    3
    4
    5
    protected void Application_BeginRequest()
    {
    if (!Context.Request.Url.AbsoluteUri.Contains("localhost") && !Context.Request.IsSecureConnection)
    Response.Redirect(Context.Request.Url.ToString().Replace("http:","https:"));
    }

    我认为"干净"意味着要进行300次重定向。在此处配置许多服务器和语言。


    推荐阅读