IIS7:HTTP-> HTTPS Cleanly

问题描述:

有没有一种干净的方式来重定向所有尝试去HTTP:/ /版本的网站到其HTTPS:/ /等效?IIS7:HTTP-> HTTPS Cleanly

+0

的回答能对詹姆斯科瓦奇的博客上找到:http://jameskovacs.com/2007/05/09/how-to-autoredirect-to-a-sslsecured-site- in-iis/ – cpuguru 2011-03-08 19:33:45

+0

如果您在IIS 7和R2上[此处](http://www.jppinto.com/2010/03/automatically-redirect-http-requests-to-https-on-iis7-using- url-rewrite-2-0 /)是一个指南,它的工作原理和最“干净”的 – 2012-09-21 15:37:08

我认为最简洁的方式是描述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="Found" url="https://{HTTP_HOST}/{R:1}" /> 
     </rule> 
     </rules> 
    </rewrite> 
    </system.webServer> 
</configuration> 
+4

这是完美的,对于奖励积分来说,它是完全独立的,因此您不必按照接受的答案中所述创建新网站 – WickyNilliams 2012-06-28 10:42:36

+1

这会针对所有网址触发,而不管文件类型如何。例如一个txt文件的直接URL? – Cheekysoft 2013-08-27 16:27:09

我认为'干净'你的意思是像300重定向。配置很多服务器&语言here

一个干净的方式只改变http - > https的URL方案,并保持一切等价。它应该是服务器端,所以没有浏览器问题。

JPPinto.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中工作,我没有 试图调试这个。相反,我将该文件放在网站的根文件夹中,并使用 403.4错误页面中的url'/SSLRedirect.asp'来引用它。
  • 最后,最棘手的部分,您不得为SSLRedirect.asp强制执行SSL。否则,你会得到一个403.4错误。为此,请在IIS7的“内容视图”中选择该文件,然后切换到“功能视图”,以便您可以编辑单个文件的SSL设置并禁用“需要SSL”复选框。

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

+1

JPPinto.com上的链接指令已更新,以突出显示这不适用于IIS 7.5或R2。他们说,由于更新版本的IIS中的安全性更改,您将会受到锁定违规。他们建议使用URL Rewrite 2.0方法(类似于@toxaq的答案)。 – AussieRob 2016-02-15 04:22:35

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

  1. 在SSL设置 - >需要SSL

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

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

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

的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:")); 
}