IIS7:干净地将HTTP-> HTTPS


Answers:


177

我认为最干净的方法如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>

9
这对我有用,除了我必须将重定向URL修改为https:// {HTTP_HOST} {REQUEST_URI}
Andrew S

6
这也为我工作。我必须添加正在以下环境下运行的应用程序... localhost / app1 => http:// {HTTP_HOST} / app1 / {R:1}
RealSollyM 2014年

15
对于还没有重写部分的任何人,请将规则放在web.config的以下部分中:<system.webServer> <rewrite> <rules> ... </ rules> </ rewrite> </ system .webServer>
raider33

16
确保在IIS服务器上安装了Microsoft URL重写模块
Iman 2015年

7
出于SEO的原因,您应该使用redirectType =“ Permanent”。回顾support.google.com/webmasters/answer/...
尼尔斯·博冠

14

我发现最简单,最干净的解决方案是

  1. 在SSL设置中->需要SSL

  2. 在错误页面->关于403.4错误->重定向到HTTPS站点

  3. 在错误页面->编辑功能设置...->为本地请求设置详细错误,为远程请求设置自定义错误页面

好处是它不需要额外的代码行。缺点是它将您重定向到绝对URL。


1
完美运行(在IIS 8.5 / 2012 R2上)。且无需修改web.config
schmendrick

你能举个例子说明这个缺点吗?它在什么情况下会发生,为什么它是负面的?如果您可以将其添加到答案中,那就太好了。非常感谢!
马科斯·迪米特里奥

2
@MarcosDimitrio我不确定,因为它已经很久了。但是我相信当我的意思是它将您重定向到绝对网址时,我的意思是“基本网址”。例如,“ http”://mywebsite.com/hellokitty将被重定向到“ https”://mywebsite.com,从而丢失了一些路径信息,这将破坏带有额外路径信息的每个现有链接。
ColacX

5

一种干净的方法仅更改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中按预期方式工作,因此我也没有尝试调试它。相反,我将文件放在站点的根文件夹中,并使用403.4错误页面中的URL'/SSLRedirect.asp'进行引用。
  • 最后,最棘手的部分是,您不得对SSLRedirect.asp强制实施SSL。否则,您将收到403.4错误。为此,请在IIS7“内容视图”中选择文件,然后切换到“功能视图”,以便您可以编辑单个文件的SSL设置并禁用“要求SSL”复选框。

IIS管理器应在标题中显示文件名。


1
JPPinto.com上的链接说明已更新,以突出显示这不适用于IIS 7.5或R2。他们说,由于更新版本的IIS中的安全性发生变化,您将收到锁定冲突。他们建议改用URL Rewrite 2.0方法(类似于@toxaq的答案)。
罗伯特·沙托克

0

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:"));
}

1
我可以通过将“ localhost”放在URI中的某个位置来轻松解决此重定向,例如查询字符串yourdomain.com?localhost=true。 我建议改为检查Request.Url.Host属性
Aidy J

0

我使用经典的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数据。因此,实际上,这是对您的安全页面的干净重定向。


-4

我认为“干净”意味着要进行300次重定向。在此处配置许多服务器和语言。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.