在重定向到web.config

时间:2016-01-26 12:33:29

标签: asp.net redirect iis ssl hsts

我有一个asp.net网络应用程序,它由子域" www"上的搜索引擎索引。我真的不想改变这一点:对根域的请求都设置为永久重定向到www版本,并且一切正常。

我已在网站上启用了HSTS,但由于重定向,我已添加的HSTS出站标头规则从未在对域根目录的第一个请求中被点击。 (它适用于后续的https请求,因为没有重定向)。这是一个问题,因为我想提交HSTS预加载的网站 - 这要求重定向包含HSTS响应标题....

我已尝试将规则上的stopProcessing属性设置为false(希望即使在重定向上也可以运行设置HSTS标头的出站规则)也无济于事。

以下是我的配置文件中的相关摘录:

<rewrite>
  <rules>
    <rule name="Canonical Host Name, HTTPS enabled" stopProcessing="false">
      <match url="(.*)" />
      <conditions logicalGrouping="MatchAll">
        <add input="{HTTP_HOST}" negate="true" pattern="www.mysite.co.uk" />
        <add input="{HTTP_HOST}" negate="true" pattern="^[a-z0-9]+\.cloudapp\.net$" />
        <add input="{HTTP_HOST}" negate="true" pattern="localhost" />
      </conditions>
      <action type="Redirect" url="https://www.mysite.co.uk/{R:1}" redirectType="Permanent" />
    </rule>

  </rules>

        <!-- hsts | http://www.hanselman.com/blog/HowToEnableHTTPStrictTransportSecurityHSTSInIIS7.aspx -->
     <outboundRules rewriteBeforeCache="true">
            <rule name="Add Strict-Transport-Security" enabled="true">
                <match serverVariable="RESPONSE_Strict_Transport_Security" pattern=".*" />
                <conditions logicalGrouping="MatchAll">
                    <add input="{HTTPS}" pattern="on" ignoreCase="true" />
                    <add input="{HTTP_HOST}" pattern="(mysite.co.uk|www.mysite.co.uk)" ignoreCase="true" />
                </conditions>
                <action type="Rewrite" value="max-age=31536000; includeSubDomains; preload" />
            </rule>  
    </outboundRules>

</rewrite>

2 个答案:

答案 0 :(得分:1)

必须按如下方式添加标题:

<system.webServer>
    <httpProtocol>
      <customHeaders>
        <add name="Strict-Transport-Security" value="max-age=31536000; includeSubDomains; preload" />
      </customHeaders>
    </httpProtocol>
</system.webServer>

即使在发送重定向时也会发送标头。 我删除了outboundRules部分。

答案 1 :(得分:0)

来自服务器故障的this answer

  

HSTS主机不得在通过非安全传输传输的HTTP响应中包含STS头字段。

请确保正确配置服务器。