是否有一种干净的方法可以将所有访问 HTTP:// 版本的站点的尝试重定向到其 HTTPS:// 等效项?
6 回答
我认为最干净的方法是在 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 更改为其他所有内容。它应该是服务器端的,这样就不会出现浏览器问题。
JPPinto.com 有关于如何完成的分步说明,除了他们使用 javascript (HttpRedirect.htm) 而不是服务器端重定向。出于某种原因,如果您启用了“显示友好的 HTTP 错误消息”,我无法让 IE 运行 javascript,默认情况下是启用的。脚本的另一件事是即使在 FF 或 Chrome 中重定向到路径也不起作用。该脚本始终重定向到根目录。(也许我错过了一些东西,因为它应该重定向到路径。)
由于这些原因,我使用 ASP 页面进行重定向。缺点当然是这需要在服务器上启用经典的 ASP。
OpsanBlog 有一个与 IIS6 配合良好的ASP 脚本和指令。
我在 IIS7 中使用这种方法时遇到了一些问题。主要是用户界面问题,因为 IIS7 很容易错过一些东西。
- 首先,您需要安装 ASP 作为 Web 服务器角色功能。
- 其次,使用虚拟目录在 IIS7 中没有按预期工作,我没有尝试调试它。相反,我将文件放在站点的根文件夹中,并使用 403.4 错误页面中的 url '/SSLRedirect.asp' 来引用它。
- 最后,最棘手的部分是,您不能对 SSLRedirect.asp 强制执行 SSL。否则你会得到一个 403.4 错误。为此,您在 IIS7 的“内容视图”中选择文件,然后切换到“功能视图”,以便您可以编辑单个文件的 SSL 设置并禁用“需要 SSL”复选框。
IIS 管理器应在标题中显示文件名。
全球.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 数据。所以实际上它是一个干净的重定向到您的安全页面。
我认为“干净”是指 300 重定向。在这里配置很多服务器和语言。