Azure云服务SSL从分段重定向到生产槽

时间:2015-03-10 18:25:44

标签: redirect azure ssl

我已在云服务的生产插槽上设置了SSL。在我的Web.Release.config中,我有一条规则从http重定向到https。我使用Release配置部署到暂存,这样当我与生产交换时,将进行重定向。但是,这会导致我的登台重定向到生产环境,这意味着我永远无法真正测试我的登台部署(基本上我可以测试重定向正在进行)。

我觉得这个设置错了。有没有人知道我的设置是否不正确?

编辑:Web.Release.config规则:

<system.webServer>
    <rewrite xdt:Transform="Insert">
      <rules>
        <rule name="CanonicalHostNameRule1">
          <match url="(.*)" />
          <conditions>
            <add input="{HTTP_HOST}" pattern="^www\.myDomain\.com$" negate="true" />
          </conditions>
          <action type="Redirect" url="http://www.myDomaim.com/{R:1}" />
        </rule>
        <rule name="http 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>
  </system.webServer>

编辑2 我最终采用@BenV的方法来确保重定向规则与我的暂存广告位的网址不匹配。有道理:D

1 个答案:

答案 0 :(得分:0)

问题实际上与您的CanonicalHostNameRule1规则有关。它基本上是说“将任何不是www.mydomain.com的东西重定向到www.mydomain.com。

由于您的暂存插槽类似于www.mydomain-staging.com,因此会重定向。

有几种方法可以解决这个问题,具体取决于您使用该规则要完成的具体操作。一种方法是添加规则以不重定向暂存。

<conditions>
  <add input="{HTTP_HOST}" pattern="^www\.myDomain\.com$" negate="true" />
  <add input="{HTTP_HOST}" pattern="^www\.myDomain-staging\.com$" negate="true" />
</conditions>

这将重定向任何非www.mydomain.com而非www.mydomain-staging.com。

在不引用暂存槽的情况下编写此代码的另一种方法是:

<conditions logicalGrouping="MatchAny">
  <add input="{HTTP_HOST}" pattern="^myDomain\.com$" />
  <add input="{HTTP_HOST}" pattern=".*myDomain\.azurewebsites\.net$" />
</conditions>

检查请求是否针对myDomain.com(不带“www”)或myDomain.azurewebsites.net(带或不带“www”),如果其中任何一个为真,则进行重定向。由于暂存URL与其中任何一个都不匹配,因此会被忽略。

(免责声明:我没有测试正则表达式,但你明白了)