我有一个在 IIS 下运行的网站,该网站已应用 SSL 证书。我们希望强制网站使用 HTTPS,只需选中“需要安全通道”框即可轻松完成,但这会立即破坏人们通过 HTTP 进行连接的能力(按照设计)。
我想要做的是找到一种方法,当人们输入错误的内容(或从旧书签连接)时,自动将他们从 HTTP 重定向到 HTTPS。
有没有办法做到这一点而不在 IIS 中创建第二个网站?
答案1
如果您需要在服务器级别执行此操作,那么您将必须创建另一个站点并将其转发到 https 站点。
如果你可以编辑代码,你可以不是在服务器级别强制执行 ssl,相反,您可以在您的网站中通过检测 url 是否以 http: 开头并使用 https: 重定向到相同的 url 来执行此操作。
答案2
我发布于堆栈溢出
如果使用“需要安全通道”设置配置了服务器/站点/vdir,则服务器的响应将是“403.4 禁止:需要 SSL 才能查看此资源。”错误或“403.5 禁止:需要 SSL 128 才能查看此资源。”。
您实际上可以自定义 403.4 或 403.5 错误以重定向回 HTTPS。使用以下命令在站点下创建 VDIR:无需 SSL(**这个很重要) - 我使用“CustomError”。在此目录中创建一个名为 403_4_Error.asp 的 ASP 文件,其中包含以下内容:
<%@ LANGUAGE="VBScript" %>
<%
if Request.ServerVariables("HTTPS") <> "on" then
sServer = Request.ServerVariables("SERVER_NAME")
sScript = Request.ServerVariables("SCRIPT_NAME")
sQuery = Request.ServerVariables("QUERY_STRING")
Response.Write("https://" & sServer & sScript & "?" & sQuery)
end if
%>
编辑服务器/站点/vdir 的 403.4/403.5 自定义错误属性,并将 MessageType 设置为 URL,将 URL 设置为“/CustomError/403_4_Error.asp”。
请注意,使用了 ASP,您可以轻松使用 ASP.net 或任何其他脚本语言。
答案3
我们最终在应用程序代码中完成了这项工作;我们的页面基类会尽早检查它是否在 HTTP 中,并根据需要重定向到 HTTPS。这实际上取决于您对应用程序代码的信任程度 :)