IIS7:HTTP-> HTTPS干净
有没有一种干净的方式来redirect到一个网站的HTTP://版本的所有尝试到其HTTPS:/ /等效?
我认为最简洁的方法是在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>
我find的最简单和干净的解决scheme是
-
在SSL设置 – >需要SSL
-
在错误页面 – >在403.4错误 – >redirect到HTTPS站点
-
在错误页面 – >编辑function设置… – >为本地请求和远程请求的自定义错误页面设置详细的错误
好处是它不需要额外的代码。 缺点是它会将您redirect到绝对url。
一个干净的方式只改变从HTTP – > HTTPS的URLscheme,并保持一切等价。 它应该是服务器端,所以没有浏览器问题。
除了使用javascript(HttpRedirect.htm)而不是服务器端redirect之外,JPPinto.com有关于如何完成的逐步说明 。 出于某种原因,如果您启用了“显示友好的HTTP错误消息”,则默认情况下,IE无法运行JavaScript。 脚本的另一件事是即使在FF或Chrome中,redirect到path也不起作用。 脚本总是redirect到根。 (也许我错过了什么,因为它应该redirect到path。)
由于这些原因,我使用了一个ASP页面进行redirect。 不利的一面是,这需要在服务器上启用传统的ASP。
OpsanBlog有一个ASP脚本和说明与IIS6很好地工作。
我在IIS7中使用这个方法有几个问题。 大多数用户界面问题,因为IIS7很容易错过一些东西。
- 首先,您需要安装ASP作为Web服务器angular色function。
- 其次,在IIS7中使用虚拟目录并不像预期的那样工作,我也没有尝试去debugging它。 相反,我把文件放在网站的根文件夹中,并使用403.4错误页面中的URL“/SSLRedirect.asp”来引用它。
- 最后,最棘手的部分是,您不得为SSLRedirect.asp强制执行SSL 。 否则,你会得到一个403.4错误。 为此,请在IIS7的“内容视图”中select文件,然后切换到“function视图”,以便您可以编辑单个文件的SSL设置并禁用“需要SSL”checkbox。
IISpipe理器应该在头中显示文件名。
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:")); }
我认为,“干净”你的意思是像300redirect。 在这里configuration大量的服务器和语言。