【问题标题】:redirect http to https Infinity loop 301 IIS(load balancing environment)将 http 重定向到 https 无限循环 301 IIS(负载平衡环境)
【发布时间】:2016-12-24 13:52:01
【问题描述】:

这里是重写规则的碎片

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

我的目的是测试将 http 重定向到 https 是否在我的测试站点上有效,但是,这将是一个无限循环,代码为 301(永久移动)

如果我将 url="https://www.example.com/TEST_SITE/{R:1} 更改为 url="{HTTP_HOST}/{R:1}",它将起作用,不再循环。但不是将我重定向到https://www.example.com/TEST_SITE/,而是将我重定向到https://www.example.com/(产品环境)。

有什么想法可以解决这个问题吗?谢谢

【问题讨论】:

  • 如果将url="https://www.example.com/TEST_SITE/{R:1}" 更改为url="https://{HTTP_HOST}/TEST_SITE/{R:1}" 会发生什么?在 stackoverflow.com/a/14925644/1297898saotn.org/iis-url-rewrite-redirect-http-to-https 上有更多 HTTP 到 HTTPS 重定向示例。有时需要一些摆弄:)
  • @Jan Reilink url="https://{HTTP_HOST}/TEST_SITE/{R:1} 我以前试过这个,不行。谢谢你的cmets和链接。我会看看进入它。
  • 规则到底是在哪里定义的?在 example.com 级别或 example.com/TEST_SITE 级别。请参阅此博客blogs.msdn.microsoft.com/kaushal/2013/05/22/… 它说-“注意:确保在默认网站下的每个虚拟目录/应用程序中禁用重写规则。由于继承,该规则将导致请求以无限循环结束调用自身重复。”
  • 我在一段时间后解决了这个问题。我打印了所有的服务器变量,结果服务器变量 {https} 没有返回任何内容,它返回一个附加变量 {http-x-SSL} 以指示其 SSL 连接。谢谢大家
  • 伟大的@uonlyYOLOonce!也许您可以用您的解决方案更新您的问题?我最好的猜测是负载均衡器(“lb”)上有一个激活的 URL 重写和/或从 lb 到网络服务器的流量没有经过 SSL 加密。

标签: asp.net redirect iis url-rewriting


【解决方案1】:

我太笨了,我昨天没想到这个...添加您的域名/HTTP_HOST 作为输入条件。

这来自我网站上的一个真实示例:

<!-- redirect HTTP naar HTTPS for WordPress https://www.saotn.org/ssl-wordpress-move-wordpress-site-https-definitive-guide/ -->
  <!-- see https://www.saotn.org/redirect-http-to-https-on-iis/ and
    https://www.saotn.org/iis-url-rewrite-redirect-http-to-https/ for more 
  information -->
  <rule name="example.com http to https" stopProcessing="true">
    <match url="(.*)" ignoreCase="true" />
    <conditions logicalGrouping="MatchAll">
      <add input="{HTTP_HOST}" pattern="^(www.)?example\.com$" />
      <add input="{HTTPS}" pattern="off" />
      <add input="{URL}" pattern="(.*)" />
    </conditions>
    <action type="Redirect" url="https://www.example.com/{R:1}" redirectType="Permanent" />
  </rule>

您的TEST_SITE 应该在{URL} 输入模式中,在{R:1} 中捕获。

【讨论】:

  • 仍然会将我重定向到 www.example.com 而不是 www.example.com/test_site。我需要提到的一件事是,这不是单个服务器。
【解决方案2】:

请尝试一下

<rule name="HTTP To HTTPS" stopProcessing="true">
        <match url=".*" />
        <conditions logicalGrouping="MatchAll" trackAllCaptures="false">
            <add input="{HTTPS}" pattern="OFF" />
            <add input="{HTTP_HOST}" pattern="^(([^\.]+)\.)?example.com$" />
        </conditions>
        <action type="Redirect" url="https://{HTTP_HOST}/{R:0}" />
    </rule>

【讨论】:

    猜你喜欢
    • 2019-08-13
    • 2018-01-18
    • 2011-12-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-08
    • 2021-07-21
    • 1970-01-01
    相关资源
    最近更新 更多