如何将标头添加到IIS URL重写重定向操作?

dav*_*ick 5 iis redirect web-config url-rewriting hsts

我正在尝试为HSTS预加载准备一个站点,其中一个要求是根域也支持HSTS.我在"www."页面上提供服务.所以我需要从根域重定向到"www".子域.由于这是一个托管在Azure上的静态站点,我试图将其全部用于IIS URL重写模块.

这是我到目前为止所拥有的:

<configuration>
  <system.webServer>
    <rewrite>
      <rules>
        <clear />
        <!-- http -> https -->
        <rule name="https" enabled="true">
            <match url="(.*)" />
            <conditions logicalGrouping="MatchAll">
                <add input="{HTTPS}" pattern="off" ignoreCase="true" />
            </conditions>
            <action type="Redirect" url="https://{HTTP_HOST}{REQUEST_URI}" redirectType="Permanent" appendQueryString="false" />
        </rule>
        <!-- https://anything -> https://www.example.com -->
        <rule name="redirect" enabled="true">
            <match url="(.*)" />
            <conditions logicalGrouping="MatchAll">
                <add input="{HTTPS}" pattern="on" ignoreCase="true" />
                <add input="{HTTP_HOST}" pattern="^(?!www.example.com$).*$" />
            </conditions>
            <action type="Redirect" url="https://www.example.com{REQUEST_URI}" redirectType="Permanent" appendQueryString="false" />
        </rule>
      </rules>
      <outboundRules>
          <rule name="hsts" enabled="true">
              <match serverVariable="RESPONSE_Strict_Transport_Security" pattern=".*" />
              <conditions>
                  <add input="{HTTPS}" pattern="on" ignoreCase="true" />
              </conditions>
              <action type="Rewrite" value="max-age=31536000; includeSubDomains; preload" />
          </rule>
      </outboundRules>
    </rewrite>
  </system.webServer>
</configuration>
Run Code Online (Sandbox Code Playgroud)

重定向效果很好:

问题是outboundRules在使用Redirect操作时不会应用(来自https://docs.microsoft.com/en-us/iis/extensions/url-rewrite-module/url-rewrite-module-上的MS文档配置参考):

使用重定向操作意味着在执行重定向后,不会为当前URL评估后续规则.

这意味着来自https://example.com - > https://www.example.com的301响应将不具有HSTS预加载所需的HSTS标头.

另请注意,虽然customHeaders(https://docs.microsoft.com/en-us/iis/configuration/system.webserver/httpprotocol/customheaders/)通常可用于向任何响应添加标头,但HSTS规范明确禁止添加Strict-Transport-Security标头到非HTTPS响应.我无法确定如何customHeaders有条件地使用,但如果有办法,这也可以解决这个特殊问题.

所以这里有一个问题:如何Strict-Transport-Security在重定向时为301响应添加标题(特别是标题)?