IIS7: HTTP-> HTTPS Cleanly

有没有一种简单的方法可以将所有尝试转向到 HTTP://版本的站点的尝试重定向到它的 HTTPS://等效版本?

71506 次浏览

我想你说的“干净利落”是指300次重定向。为许多服务器和语言配置 给你

一个干净的方法只改变了 http-> https 的 URL 模式,并使其他所有内容等价。它应该是服务器端的,这样就不会有浏览器问题。

JPPinto.com 有关于如何实现这一点的 分步说明,除了他们使用 javascript (HttpRedirect.htm)而不是服务器端重定向。出于某种原因,如果你启用了“显示友好的 HTTP 错误消息”,我不能让 IE 运行 javascript,这是默认开启的。该脚本的另一个问题是,即使在 FF 或 Chrome 中,路径重定向也不能正常工作。脚本总是重定向到 root 用户。(也许我遗漏了什么,因为它应该重定向到路径。)

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

OpsanBlog 有一个与 IIS6协作良好的 ASP 脚本和说明

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

  • 首先,您需要将 ASP 安装为 网络服务器角色功能。
  • 其次,使用虚拟目录也不是不可能 按照 IIS7的要求工作,而我没有 尝试调试这个。相反,我把文件放在根文件夹的网站和使用 中的 url’/SSLRedirect.asp’ 403.4错误页面引用它。
  • 最后,最棘手的部分,你 必须不对 SSLRedirect.asp 强制执行 SSL。否则您将得到一个403.4错误。为此,您可以在 IIS7“ Content View”中选择文件,并切换到“ Features View”,以便您可以编辑单个文件的 SSL 设置并禁用“ Require SSL”复选框。

IIS 管理器应该在头中显示文件名。

我认为最干净的方法是描述 这里是 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>

我找到的最简单和干净的解决办法是

  1. 在 SSL 设置-> 要求 SSL

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

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

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

Global.asax

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

我使用经典的 asp (Intranet) ,在需要登录的页面上,登录包含文件会重定向:

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 数据。所以实际上它是一个干净的重定向到您的安全页面。