IIS7:HTTP->HTTPS 干净
Posted
技术标签:
【中文标题】IIS7:HTTP->HTTPS 干净【英文标题】:IIS7: HTTP->HTTPS Cleanly 【发布时间】:2010-09-07 23:06:18 【问题描述】:是否有一种干净的方法可以将所有访问 HTTP:// 版本网站的尝试重定向到其 HTTPS:// 等效项?
【问题讨论】:
答案可以在 James Kovac 的博客上找到:jameskovacs.com/2007/05/09/… 如果您在 IIS 7 和 R2 上,here 是一个有效且最“干净”的指南 【参考方案1】:我认为最干净的方法是如here on 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>
【讨论】:
这对我有用,但我必须将重定向 URL 修改为 https://HTTP_HOSTREQUEST_URI 这也对我有用。我必须添加我正在运行的应用程序...localhost/app1 => http://HTTP_HOST/app1/R:1 对于还没有重写部分的任何人,请将规则放在 web.config 的以下部分中:我发现的最简单、最干净的解决方案是
在 SSL 设置中 -> 需要 SSL
在错误页面中 -> 出现 403.4 错误 -> 重定向到 HTTPS 站点
在错误页面中 -> 编辑功能设置... -> 设置本地请求的详细错误和远程请求的自定义错误页面
好处是它不需要额外的代码行。 缺点是它会将您重定向到绝对网址。
【讨论】:
完美运行(在 IIS 8.5 / 2012 R2 上)。并且无需修改 web.config 你能举个例子来说明这个缺点吗?在什么情况下会发生,为什么它是负面的?如果您可以将其添加到您的答案中,那就太好了。非常感谢! @MarcosDimitrio 我不确定,因为那是很久以前的事了。但我相信当我的意思是将您重定向到绝对网址时,我的意思是“基本网址”。例如,“http”://mywebsite.com/hellokitty 将被重定向到“https”://mywebsite.com 从而丢失一些路径信息,这会破坏每个现有链接并带有额外的路径信息。【参考方案3】:一种干净的方式仅将 URL 方案从 http -> https 更改为其他所有内容。它应该是服务器端的,这样就不会出现浏览器问题。
JPInto.com 有 Step-By-Step instructions 说明这是如何完成的,除了他们使用 javascript (HttpRedirect.htm) 而不是服务器端重定向。出于某种原因,如果你启用了“显示友好的 HTTP 错误消息”,我无法让 IE 运行 javascript,默认情况下它是打开的。脚本的另一件事是即使在 FF 或 Chrome 中重定向到路径也不起作用。该脚本始终重定向到根目录。 (也许我错过了一些东西,因为它应该重定向到路径。)
出于这些原因,我使用 ASP 页面进行重定向。缺点当然是这需要在服务器上启用经典的 ASP。
OpsanBlog 有一个ASP script and instructions,可以很好地与 IIS6 配合使用。
我在 IIS7 中使用这种方法时遇到了一些问题。主要是用户界面问题,因为 IIS7 很容易漏掉一些东西。
首先,您需要将 ASP 安装为 Web 服务器角色功能。 其次,使用虚拟目录并没有 在 IIS7 中按预期工作,但我没有 尝试调试这个。相反,我将文件放在站点的根文件夹中并使用 中的 url '/SSLRedirect.asp' 403.4 错误页面来引用它。 最后,最棘手的部分是,您不得为 SSLRedirect.asp 强制实施 SSL。否则你会得到一个 403.4 错误。为此,您在 IIS7 的“内容视图”中选择文件,然后切换到“功能视图”,以便您可以编辑单个文件的 SSL 设置并禁用“需要 SSL”复选框。IIS 管理器应在标题中显示文件名。
【讨论】:
JPPinto.com 上的链接说明已更新,以强调这不适用于 IIS 7.5 或 R2。他们说,由于新版本 IIS 的安全性更改,您将遇到锁冲突。他们建议改用 URL Rewrite 2.0 方法(与@toxaq 的答案类似)。【参考方案4】:全球.asax
protected void Application_BeginRequest()
if (!Context.Request.Url.AbsoluteUri.Contains("localhost") && !Context.Request.IsSecureConnection)
Response.Redirect(Context.Request.Url.ToString().Replace("http:", "https:"));
【讨论】:
我可以通过将“localhost”放入 URI 的某处来轻松绕过此重定向,例如查询字符串yourdomain.com?localhost=true 我建议改为检查 Request.Url.Host 属性【参考方案5】:我使用经典的 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 数据。所以实际上它是一个干净的重定向到您的安全页面。
【讨论】:
【参考方案6】:我认为“干净”是指 300 重定向。为许多服务器和语言配置here。
【讨论】:
以上是关于IIS7:HTTP->HTTPS 干净的主要内容,如果未能解决你的问题,请参考以下文章
在 IIS7 中将 URL 从 https:// 重写为 http://