Answers:
我认为最干净的方法如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>
我发现最简单,最干净的解决方案是
在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确实很容易遗漏某些东西。
IIS管理器应在标题中显示文件名。
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(内联网),并且在需要登录的页面上,登录包含文件会进行重定向:
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数据。因此,实际上,这是对您的安全页面的干净重定向。