URL将http重写为https,但不在标准443端口上重写

时间:2015-03-30 15:31:03

标签: url-rewrite-module iis-8.5

我想在IIS 8.5中使用URL重写模块将任何非https流量从http://something.com:112重定向到https://something.com:444(请注意这些不是标准的http和https端口号)。

我尝试使用此重写规则,但它不起作用:

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

我在失败的请求日志中得到的错误是:

ModuleName IIS Web Core 通知MAP_REQUEST_HANDLER HttpStatus 404 找不到HttpReason HttpSubStatus 0 ErrorCode系统找不到指定的文件。 (0x80070002)

我做错了什么?

1 个答案:

答案 0 :(得分:0)

我找到了答案,我错误地使用HTTP_POST,其中包含SERVER_NAME和HTTP_PORT。相反,我使用了这个动作,似乎工作正常:

我也注意到我不需要检查这两个条件。这个实际上做了我需要的,因为我们有一些网站在其他https端口上运行:

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