12

我在 web.config 的实时配置中编写了以下转换。

<system.webServer>
    <rewrite xdt:Transform="Insert">
      <rules>
        <rule name="httpsrewrite">
          <match url=".*" />
          <serverVariables>
            <set name="SERVER_PORT" value="443" />
            <set name="HTTPS" value="on" />
          </serverVariables>
          <action type="None" />
        </rule>
      </rules>
    </rewrite>
  </system.webServer>

我的 web.config 中没有元素。

转换只是不起作用。我所有的其他转换(替换 elmah 和连接字符串)都可以正常工作。

4

2 回答 2

3

如果没有看到您的源文件,很难给出明确的答案。

在您的 web.config 文件中,您必须有一个 /configuration/system.webServer 元素才能使转换工作。如果您没有它,则没有可插入 /configuration/system.webServer/rewrite 元素的元素。

如果这没有帮助,请至少发布您的 web.config 和转换文件的结构。此外,我建议您安装 SlowCheetah VS 扩展,它非常适合故障排除/预览转换。

于 2014-06-12T12:09:54.823 回答
2

我发现 xdt:Locator 和 xdt:Transform 仍然适用于 <rewrite> 元素,即使 Visual Studio 仍会生成警告消息(“ http://schemas.microsoft.com/XML-Document-Transform:Locator ”属性是未声明)。

<system.webServer>
    <rewrite>
        <rules>
            <clear />
            <rule name="Service Only Request Blocking Rule 1" stopProcessing="true" xdt:Locator="Match(name)" xdt:Transform="Replace">
                <match url=".*" />
                <conditions>
                    <add input="{URL}" pattern="\/address\/search\/.*$" />
                </conditions>
                <action type="CustomResponse" statusCode="403" statusReason="Forbidden: Access is denied." statusDescription="You do not have permission to complete this operation." />
            </rule>
        </rules>
    </rewrite>
</system.webServer>
于 2015-06-24T04:23:43.860 回答