<!--
    
    IIS URL Rewrite configuration schema.
    
    ** Please DO NOT edit this file yourself. **
    
    If you want to add configuration sections to the schema, you may place 
    them in .xml files similar to this one, in this directory. They will be 
    picked up automatically on startup.

-->

<configSchema>
  <sectionSchema name="system.webServer/rewrite/globalRules">
    <collection addElement="rule" clearElement="clear" removeElement="remove">
      <attribute name="name" type="string" required="true" isUniqueKey="true"/>
      <attribute name="enabled" type="bool" defaultValue="true"/>
      <attribute name="patternSyntax" type="enum" defaultValue="ECMAScript">
        <enum name="ECMAScript" value="0"/>
        <enum name="Wildcard" value="1"/>
        <enum name="ExactMatch" value="2"/>
      </attribute>
      <attribute name="stopProcessing" type="bool" defaultValue="false"/>
      <element name="match">
        <attribute name="url" type="string" validationType="nonEmptyString"/>
        <attribute name="ignoreCase" type="bool" defaultValue="true"/>
        <attribute name="negate" type="bool" defaultValue="false"/>
      </element>
      <element name="conditions">
        <attribute name="logicalGrouping" type="enum" defaultValue="MatchAll">
          <enum name="MatchAll" value="0"/>
          <enum name="MatchAny" value="1"/>
        </attribute>
        <attribute name="trackAllCaptures" type="bool" defaultValue="false" />
        <collection addElement="add">
          <attribute name="input" type="string" isCombinedKey="true"/>
          <attribute name="matchType" type="enum" defaultValue="Pattern" isCombinedKey="true">
            <enum name="Pattern" value="0"/>
          </attribute>
          <attribute name="pattern" type="string" isCombinedKey="true"/>
          <attribute name="ignoreCase" type="bool" defaultValue="true" isCombinedKey="true"/>
          <attribute name="negate" type="bool" defaultValue="false" isCombinedKey="true"/>
        </collection>
      </element>
      <element name="serverVariables">
        <collection addElement="set">
          <attribute name="name" type="string" required="true" isUniqueKey="true" validationType="requireTrimmedString"/>
          <attribute name="value" type="string" />
          <attribute name="replace" type="bool" defaultValue="true" />
        </collection>
      </element>
      <element name="action">
        <attribute name="type" type="enum" defaultValue="None">
          <enum name="None" value="0"/>
          <enum name="Rewrite" value="1"/>
          <enum name="Redirect" value="2"/>
          <enum name="CustomResponse" value="3"/>
          <enum name="AbortRequest" value="4"/>
        </attribute>
        <attribute name="url" type="string" validationType="requireTrimmedString"/>
        <attribute name="appendQueryString" type="bool" defaultValue="true"/>
        <attribute name="redirectType" type="enum" defaultValue="Permanent">
          <enum name="Permanent" value="301"/>
          <enum name="Found" value="302"/>
          <enum name="SeeOther" value="303"/>
          <enum name="Temporary" value="307"/>
        </attribute>
        <attribute name="statusCode" type="uint" validationType="integerRange" validationParameter="300,307,exclude" defaultValue="0"/>
        <attribute name="subStatusCode" type="uint" validationType="integerRange" validationParameter="0,999" defaultValue="0"/>
        <attribute name="statusReason" type="string"/>
        <attribute name="statusDescription" type="string"/>
      </element>
    </collection>
  </sectionSchema>
  <sectionSchema name="system.webServer/rewrite/allowedServerVariables">
    <collection addElement="add" clearElement="clear" removeElement="remove">
      <attribute name="name" type="string" required="true" isUniqueKey="true"/>
    </collection>
  </sectionSchema>
  <sectionSchema name="system.webServer/rewrite/rules">
    <collection addElement="rule" clearElement="clear" removeElement="remove">
      <attribute name="name" type="string" required="true" isUniqueKey="true"/>
      <attribute name="enabled" type="bool" defaultValue="true"/>
      <attribute name="patternSyntax" type="enum" defaultValue="ECMAScript">
        <enum name="ECMAScript" value="0"/>
        <enum name="Wildcard" value="1"/>
        <enum name="ExactMatch" value="2"/>
      </attribute>
      <attribute name="stopProcessing" type="bool" defaultValue="false"/>
      <element name="match">
        <attribute name="url" type="string" validationType="nonEmptyString"/>
        <attribute name="ignoreCase" type="bool" defaultValue="true"/>
        <attribute name="negate" type="bool" defaultValue="false"/>
      </element>
      <element name="conditions">
        <attribute name="logicalGrouping" type="enum" defaultValue="MatchAll">
          <enum name="MatchAll" value="0"/>
          <enum name="MatchAny" value="1"/>
        </attribute>
        <attribute name="trackAllCaptures" type="bool" defaultValue="false" />
        <collection addElement="add">
          <attribute name="input" type="string"/>
          <attribute name="matchType" type="enum" defaultValue="Pattern">
            <enum name="Pattern" value="0"/>
            <enum name="IsFile" value="1"/>
            <enum name="IsDirectory" value="2"/>
          </attribute>
          <attribute name="pattern" type="string"/>
          <attribute name="ignoreCase" type="bool" defaultValue="true"/>
          <attribute name="negate" type="bool" defaultValue="false"/>
        </collection>
      </element>
      <element name="serverVariables">
        <collection addElement="set">
          <attribute name="name" type="string" required="true" isUniqueKey="true" validationType="requireTrimmedString"/>
          <attribute name="value" type="string" />
          <attribute name="replace" type="bool" defaultValue="true" />
        </collection>
      </element>
      <element name="action">
        <attribute name="type" type="enum" defaultValue="None">
          <enum name="None" value="0"/>
          <enum name="Rewrite" value="1"/>
          <enum name="Redirect" value="2"/>
          <enum name="CustomResponse" value="3"/>
          <enum name="AbortRequest" value="4"/>
        </attribute>
        <attribute name="url" type="string" validationType="requireTrimmedString"/>
        <attribute name="appendQueryString" type="bool" defaultValue="true"/>
        <attribute name="logRewrittenUrl" type="bool" defaultValue="false"/>
        <attribute name="redirectType" type="enum" defaultValue="Permanent">
          <enum name="Permanent" value="301"/>
          <enum name="Found" value="302"/>
          <enum name="SeeOther" value="303"/>
          <enum name="Temporary" value="307"/>
        </attribute>
        <attribute name="statusCode" type="uint" validationType="integerRange" validationParameter="300,307,exclude"/>
        <attribute name="subStatusCode" type="uint" validationType="integerRange" validationParameter="0,999" defaultValue="0"/>
        <attribute name="statusReason" type="string"/>
        <attribute name="statusDescription" type="string"/>
      </element>
    </collection>
  </sectionSchema>
  <sectionSchema name="system.webServer/rewrite/outboundRules">
    <attribute name="rewriteBeforeCache" type="bool" defaultValue="false" />

    <element name="customTags">
      <collection addElement="tags" clearElement="clear" removeElement="remove">
        <attribute name="name" type="string" required="true" isUniqueKey="true"/>
        <collection addElement="tag" clearElement="clear" removeElement="remove">
          <attribute name="name" type="string" required="true" isCombinedKey="true" validationType="nonEmptyString" />
          <attribute name="attribute" type="string" required="true" isCombinedKey="true" validationType="nonEmptyString"/>
        </collection>
      </collection>
    </element>

    <element name="preConditions">
      <collection addElement="preCondition" clearElement="clear" removeElement="remove">
        <attribute name="name" type="string" required="true" isUniqueKey="true"/>
        <attribute name="logicalGrouping" type="enum" defaultValue="MatchAll">
          <enum name="MatchAll" value="0"/>
          <enum name="MatchAny" value="1"/>
        </attribute>
        <attribute name="patternSyntax" type="enum" defaultValue="ECMAScript">
          <enum name="ECMAScript" value="0"/>
          <enum name="Wildcard" value="1"/>
          <enum name="ExactMatch" value="2"/>
        </attribute>
        <collection addElement="add">
          <attribute name="input" type="string" isCombinedKey="true"/>
          <attribute name="matchType" type="enum" defaultValue="Pattern" isCombinedKey="true">
            <enum name="Pattern" value="0" isCombinedKey="true"/>
          </attribute>
          <attribute name="pattern" type="string" isCombinedKey="true"/>
          <attribute name="ignoreCase" type="bool" defaultValue="true" isCombinedKey="true"/>
          <attribute name="negate" type="bool" defaultValue="false" isCombinedKey="true"/>
        </collection>
      </collection>
    </element>

    <collection addElement="rule" clearElement="clear" removeElement="remove">              
      <attribute name="name" type="string" required="true" isUniqueKey="true"/>
      <attribute name="preCondition" type="string"/>
      <attribute name="enabled" type="bool" defaultValue="true"/>
      <attribute name="patternSyntax" type="enum" defaultValue="ECMAScript">
        <enum name="ECMAScript" value="0"/>
        <enum name="Wildcard" value="1"/>
        <enum name="ExactMatch" value="2"/>
      </attribute>
      <attribute name="stopProcessing" type="bool" defaultValue="false"/>
      <element name="match">
        <attribute name="filterByTags" type="flags" default="None">
          <flag name="None" value="0"/>
          <flag name="A" value="1"/>          <!--href-->
          <flag name="Area" value="2"/>       <!--href-->
          <flag name="Base" value="4"/>       <!--href-->
          <flag name="Form" value="8"/>       <!--action-->
          <flag name="Frame" value="16"/>     <!--src,longdesc-->
          <flag name="Head" value="32"/>      <!--profile-->
          <flag name="IFrame" value="64"/>    <!--src,longdesc-->
          <flag name="Img" value="128"/>      <!--src,longdesc,usemap-->
          <flag name="Input" value="256"/>    <!--src,usemap-->
          <flag name="Link" value="512"/>     <!--href-->
          <flag name="Script" value="1024"/>  <!--src-->
          <flag name="CustomTags" value="32768"/> <!--Use filter attribute-->
        </attribute>
        <attribute name="customTags" type="string"/>
        <attribute name="serverVariable" type="string" />
        <attribute name="pattern" type="string"/>
        <attribute name="occurrences" type="int64" defaultValue="0"/>
        <attribute name="ignoreCase" type="bool" defaultValue="true"/>
        <attribute name="negate" type="bool" defaultValue="false"/>
      </element>
      <element name="conditions">
        <attribute name="logicalGrouping" type="enum" defaultValue="MatchAll">
          <enum name="MatchAll" value="0"/>
          <enum name="MatchAny" value="1"/>
        </attribute>
        <attribute name="trackAllCaptures" type="bool" defaultValue="true" />
        <collection addElement="add">
          <attribute name="input" type="string" isCombinedKey="true"/>
          <attribute name="matchType" type="enum" defaultValue="Pattern" isCombinedKey="true">
            <enum name="Pattern" value="0"/>
          </attribute>
          <attribute name="pattern" type="string" isCombinedKey="true"/>
          <attribute name="ignoreCase" type="bool" defaultValue="true" isCombinedKey="true"/>
          <attribute name="negate" type="bool" defaultValue="false" isCombinedKey="true"/>
        </collection>
      </element>
      <element name="action">
        <attribute name="type" type="enum" defaultValue="None">
          <enum name="None" value="0"/>
          <enum name="Rewrite" value="1"/>
        </attribute>
        <attribute name="value" type="string" />
        <attribute name="replace" type="bool" defaultValue="true"/>
      </element>
    </collection>
  </sectionSchema>
  <sectionSchema name="system.webServer/rewrite/providers">
    <collection addElement="provider" clearElement="clear" removeElement="remove">
      <attribute name="name" type="string" required="true" isUniqueKey="true" validationType="requireTrimmedString"/>
      <attribute name="type" type="string" required="true" validationType="requireTrimmedString" />
      <element name="settings">
        <collection addElement="add" clearElement="clear" removeElement="remove">
          <attribute name="key" type="string" required="true" isUniqueKey="true" validationType="nonEmptyString" />
          <attribute name="value" type="string" />
          <attribute name="encryptedValue" type="string" encrypted="true" defaultValue="[enc:AesProvider::enc]" />
        </collection>
      </element>
    </collection>
  </sectionSchema>
  <sectionSchema name="system.webServer/rewrite/rewriteMaps">
    <collection addElement="rewriteMap" clearElement="clear" removeElement="remove">
      <attribute name="name" type="string" required="true" isUniqueKey="true" validationType="requireTrimmedString"/>
      <attribute name="defaultValue" type="string"/>
      <attribute name="ignoreCase" type="bool" defaultValue="true"/>
      <collection addElement="add" clearElement="clear" removeElement="remove">
        <attribute name="key" type="string" required="true" caseSensitive="true" isUniqueKey="true"/>
        <attribute name="value" type="string"/>
      </collection>
    </collection>
  </sectionSchema>
</configSchema>