I have made a config section in my web.config file that has all rewrite rules like the following
<rewrite>
<outboundRules>
<rule name="OutboundRewriteCatalogURL" preCondition="ResponseIsHtml1">
<match filterByTags="A" pattern="^(.*/)Catalog\.aspx\?Catalog=([^=&]+)&(?:amp;)?Title=([^=&]+)$" />
<action type="Rewrite" value="{R:1}ctlg/{R:2}/{R:3}/" />
</rule>
<rule name="OutboundRewriteCategoryURL" preCondition="ResponseIsHtml1">
<match filterByTags="A" pattern="^(.*/)ProductList\.aspx\?Catalog=([^=&]+)&(?:amp;)?Category=([^=&]+)&(?:amp;)?Title=([^=&]+)$" />
<action type="Rewrite" value="{R:1}categ/{R:2}/{R:3}/{R:4}/" />
</rule>
<rule name="OutboundRewriteFullProductURL" preCondition="ResponseIsHtml1">
<match filterByTags="A, Form, Img" pattern="^(.*/)Product\.aspx\?Catalog=([^=&]+)&(?:amp;)?Category=([^=&]+)&(?:amp;)?Product=([^=&]+)&(?:amp;)?Title=([^=&]+)$" />
<action type="Rewrite" value="{R:1}prd/{R:2}-{R:3}-{R:4}/{R:5}/" />
</rule>
<preConditions>
<preCondition name="ResponseIsHtml1">
<add input="{RESPONSE_CONTENT_TYPE}" pattern="^text/html" />
</preCondition>
</preConditions>
</outboundRules>
<rules>
<rule name="RedirectCatalogURL" stopProcessing="true">
<match url="^Catalog\.aspx$" />
<conditions>
<add input="{REQUEST_METHOD}" pattern="^POST$" negate="true" />
<add input="{QUERY_STRING}" pattern="^Catalog=([^=&]+)&Title=([^=&]+)$" />
</conditions>
<action type="Redirect" url="Catalog/{C:1}/{C:2}" appendQueryString="false" />
</rule>
<rule name="RewriteCatalogURL" stopProcessing="true">
<match url="^ctlg/([^/]+)/([^/]+)/?$" />
<conditions>
<add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />
<add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" />
</conditions>
<action type="Rewrite" url="Catalog.aspx?Catalog={R:1}&Title={R:2}" />
</rule>
<rule name="RedirectCategoryURL" stopProcessing="true">
<match url="^ProductList\.aspx$" />
<conditions>
<add input="{REQUEST_METHOD}" pattern="^POST$" negate="true" />
<add input="{QUERY_STRING}" pattern="^Catalog=([^=&]+)&Category=([^=&]+)&Title=([^=&]+)$" />
</conditions>
<action type="Redirect" url="categ/{C:1}/{C:2}/{C:3}" appendQueryString="false" />
</rule>
<rule name="RewriteCategoryURL" stopProcessing="true">
<match url="^categ/([^/]+)/([^/]+)/([^/]+)/?$" />
<conditions>
<add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />
<add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" />
</conditions>
<action type="Rewrite" url="ProductList.aspx?Catalog={R:1}&Category={R:2}&Title={R:3}" />
</rule>
<rule name="RedirectProductURL" stopProcessing="true">
<match url="^Product\.aspx$" />
<conditions>
<add input="{REQUEST_METHOD}" pattern="^POST$" negate="true" />
<add input="{QUERY_STRING}" pattern="^Catalog=([^=&]+)&Category=([^=&]+)&Product=([^=&]+)&Title=([^=&]+)$" />
</conditions>
<action type="Redirect" url="prd/{C:1}-{C:2}-{C:3}/{C:4}" appendQueryString="false" />
</rule>
<rule name="RewriteProductURL" stopProcessing="true">
<match url="^prd/([^/]+)-([^/]+)-([^/]+)/([^/]+)/?$" />
<conditions>
<add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />
<add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" />
</conditions>
<action type="Rewrite" url="Product.aspx?Catalog={R:1}&Category={R:2}&Product={R:3}&Title={R:4}" />
</rule>
</rules>
</rewrite>
Its very nice and working good but I dont want to have all these stuff in the web.config file , is there a way to have rewrite configuration in an external config file?
You can split your configuration into several files and include the parts into the main web.config file using the configSource attribute, e.g:
web.config:
<system.web>
...
<profile configSource="profile.config" />
...
</system.web>
profile.config:
<profile>
<properties>
<add name="Name" type="String" />
<add name="Age" type="Int32" />
</properties>
</profile>
See this blog post or this question for more information.