【问题标题】:IIS HTTP to HTTPS relative redirectIIS HTTP 到 HTTPS 的相对重定向
【发布时间】:2013-03-23 07:32:35
【问题描述】:

我最近为我的网站获得了 SSL 证书,并希望将所有流量重定向到 HTTPS。我把所有东西都转到https://mydomain.com,但如果有人输入http://mydomain.com/anotherpage,它会丢弃另一个页面,只是将用户带到主页。

我在web.config 文件中的规则如下所示:

<rule name="HTTP to HTTPS redirect" stopProcessing="true">
  <match url="(.*)" />
  <conditions>
    <add input="{HTTPS}" pattern="off" ignoreCase="true" />
  </conditions>
  <action type="Redirect" redirectType="Found" url="https://{HTTP_HOST}/{R:1}" />
</rule>

我也试过https://{HTTP_HOST}{REQUEST_URI},但没有成功。谁能告诉我我需要做什么才能使网站重定向到页面的正确 HTTPS 版本?我感觉它与模式有关,但我似乎无法弄清楚语法。

【问题讨论】:

  • 我认为这与反向引用有关。如果您将模式更改为url=".*" 并重写为url="https://{HTTP_HOST}/{R:0}" 怎么办?
  • 这仍然会将所有内容重定向回主页。
  • 这真的很奇怪。您将不得不使用the failed request tracing 工具来查看问题出在哪里。

标签: http iis redirect ssl https


【解决方案1】:

改成:

<rewrite>
   <rules>
      <rule name="Redirect to HTTPS" stopProcessing="true">
         <match url="(.*)" />
         <conditions>
            <add input="{HTTPS}" pattern="^OFF$" />
         </conditions>
         <action type="Redirect" url="https://{HTTP_HOST}/{R:1}" />
      </rule>
   </rules>
</rewrite>

【讨论】:

  • 这里的关键变化是什么? pattern="^OFF$"?
【解决方案2】:

我找到了一种方法来做到这一点,你不需要重写模块。
以下在 Windows 8 (IIS 8.5) 上对我有用:

  1. 从您的站点中删除 HTTP 绑定(保留 HTTPS)
  2. 添加其他网站
  3. 确保新站点具有 HTTP 绑定
  4. 如图所示配置 HTTP 重定向:

现在所有 HTTP 请求都将重定向到您的 HTTPS 站点,并将保留 URL 的其余部分。

【讨论】:

  • 太棒了!还能够绑定IP地址以重定向到https!谢谢!
【解决方案3】:

我相信 AndyH 的回答是最简单和最好的方法。我发现使用 URL 重写也可能与可能将用户重定向到另一个页面的代码冲突。 IT 经常在我们的环境中崩溃。但安迪的解决方案完美无缺。我还认为 Andy 的解决方案将减少服务器的开销,因为它不需要检查每个 url 命中它的可能的重写条件。

【讨论】:

    【解决方案4】:

    我还不能发表评论,否则我会在 AndyH 的回答下将此作为评论。解决方案是正确的,尽管我遇到了一个进一步的障碍(可能与使用 Adob​​e 的 Coldfusion 服务器有关)。我想分享一些我必须为其他可能遇到它的不幸灵魂做的进一步研究。

    一旦设置,重定向将始终在此 url 结束:

    https://xxx.xxx.com/jakarta/isapi_redirect.dll
    

    在 Adob​​e 线程 (https://forums.adobe.com/thread/1034854) 中找到了解决此问题的方法:我必须更改应用程序池的设置,如下所示:

    真实站点(仅 HTTPS 绑定,实际上包含代码和虚拟目录) 应用程序池的高级设置:Enable 32-Bit Applications : False

    Http_Redirect 站点(仅 HTTP 绑定,是没有目录的文件夹的空白外壳) 应用程序池的高级设置:Enable 32-Bit Applications : True


    编辑:另一个细节,与查询字符串保存有关:

    根据这篇文章中的建议 (http://www.developerfusion.com/code/4678/permanent-301-redirect-with-querystring-in-iis/)

    在域末尾添加$S$Q,并确保选中Redirect all requests to exact destination 框。然后它也会保存查询字符串。

    【讨论】:

      【解决方案5】:

      R:1 删除我的文件夹时遇到了同样的问题。 我是这样修的。

      <rule name="http to https" stopProcessing="true">
          <match url="(.*)" />
          <conditions>
             <add input="{HTTPS}" pattern="^OFF$" />
          </conditions>
          <action type="Redirect" url="https://{HTTP_HOST}{REQUEST_URI}"
                  appendQueryString="false" redirectType="SeeOther" />
      </rule>
      

      【讨论】:

        【解决方案6】:


        我找到了解决方法:

        考虑一下 IIS 中的网站是什么:只是一组规则、获取文件的路径及其绑定。

        此外,还有一个名为“HTTP Redirect”的函数(标准包含在 IIS 中),它将一个主机重定向到另一个主机,保留所有子目录(它创建一个相对路径)。解决方法是在您的网站中仅保留 HTTPS(端口 443)的绑定,并使用 HTTP(端口 80)上的绑定创建另一个绑定,并为此设置一个 HTTP 重定向到您的 URL,使用 https://

        例如,考虑一个名为mytest 的网站及其网址http://www.mytest.com/https://www.mytest.com/。 设置它而不是仅绑定https://www.mytest.com/,并删除http 绑定。然后创建一个具有相同本地路径的新网站,名为 mytest http,仅绑定端口 80 (http://www.mytest.com/),并为此设置一个 HTTP Redirecthttps://www.mytest.com/
        简单而干净,这应该与用户直接访问 https url 一样快,因为它只是一个内部重定向。我希望这对你有用!

        【讨论】:

          【解决方案7】:

          您可以将 URL 重写模块添加到 IIS(IIS 7 或更高版本),它允许您以可视方式添加创建重定向。模块可以在here下载。

          这个step-by-step tutorial 为我创造了奇迹,并解释说在使用这个模块时,它实际上所做的只是将一些代码添加到您的web.config 文件中:

          <rewrite>
              <rules>
                  <rule name="Redirect to HTTPS" stopProcessing="true">
                      <match url="(.*)" />
                      <conditions>
                          <add input="{HTTPS}" pattern="^OFF$" />
                      </conditions>
                      <action type="Redirect" url="https://{HTTP_HOST}/{R:1}" redirectType="SeeOther" />
                  </rule>
              </rules>
          </rewrite>
          

          【讨论】:

            【解决方案8】:

            我发现

            <action type="Redirect" redirectType="Found" url="https://{HTTP_HOST}/{R:1}" />
            

            语法仅适用于网站的 ROOT web.config 文件。

            如果重写规则应用于虚拟 web.config 文件,则使用..

            <action type="Redirect" redirectType="Found" url="https://{HTTP_HOST}{URL}" />
            

            {URL} 语法将包括初始正斜杠、虚拟路径和任何 URL 参数。

            【讨论】:

              猜你喜欢
              • 2013-05-02
              • 2019-09-03
              • 2011-09-16
              • 1970-01-01
              • 2017-09-07
              • 2019-08-17
              • 1970-01-01
              • 1970-01-01
              • 2018-01-18
              相关资源
              最近更新 更多