updating url rewriting rule with vs2012 web deployment web.config transformations

msdeploy, visual-studio-2012

Solution

I use SlowCheetah to transform my web.config for production. I originally tried what you tried, but found that I had to add an empty

<rewrite>
  <rules />
</rewrite>

to the base web.config

and then write a transform like

<system.webServer>
    <rewrite>
      <rules>
        <rule name="Redirect to HTTPS" stopProcessing="true" xdt:Transform="Insert">
          <match url="(.*)" />
          <conditions>
            <add input="{HTTPS}" pattern="^OFF$" />
          </conditions>
          <action type="Redirect" url="https://{HTTP_HOST}/{R:1}" redirectType="Permanent" />
        </rule>
      </rules>
    </rewrite>
</system.webServer>

(that is a redirect transform, but I think the same principal should apply).

Note `xdt:Transform="Insert"` to insert a new node into the skeletal `<rules />` in the base config file.

Problem

I can't figure out how to get my web.config deployment transformation to work for a rewrite rule. I've tried the following and it ignores it. ``` <?xml version="1.0"?> <configuration xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform"> <system.webServer> <rewrite xdt:Transform="Replace"> <rules> <rule name="Force HTTPS On Login/Register" stopProcessing="true"> <match url="Account/Login(.*)|Register(.*)" ignoreCase="true" /> <conditions> <add input="{HTTPS}" pattern="^OFF$" /> </conditions> <action type="Redirect" url="https://{HTTP_HOST}/{R:0}" redirectType="Permanent" /> </rule> <rule name="Force HTTPS Off" stopProcessing="true"> <match url="((Account/Login(.*))|(Register(.*)))" negate="true" ignoreCase="true" /> <conditions> <add input="{HTTPS}" pattern="^ON$" ignoreCase="true" /> </conditions> <action type="Redirect" url="http://{HTTP_HOST}{REQUEST_URI}" redirectType="Permanent" /> </rule> </rules> </rewrite> </system.webServer> ```

Original source