是否有一种干净的方法可以将所有尝试转到站点的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次重定向。在此处配置许多服务器和语言。