URL rewrite rule conflits in IIS?

1.8k Views Asked by At

I am getting problem in URL rewrite rules. I am used UrlRewritingNet.UrlRewriter Dll for Url rewriting in asp.net website. I used rules name as "Advanced" & Other rule name as DefaultRule that is used for any user profile page(ie. any user's profile page). When I entered username as "AdvancedMachinesTools".
That Rules as below:-

<urlrewritingnet rewriteOnlyVirtualUrls="true" contextItemsPrefix="QueryString" defaultPage="Login" xmlns="http://www.urlrewriting.net/schemas/config/2006/07">
<rewrites>
    <add name="advanced" virtualUrl="^~/advanced" rewriteUrlParameter="ExcludeFromClientQueryString" destinationUrl="~/advancedSearch.aspx" ignoreCase="true"  />
    <add name="DefaultRule" virtualUrl="^~/(.*)" rewriteUrlParameter="ExcludeFromClientQueryString" destinationUrl="~/UserProfile.aspx?uname=$1" ignoreCase="true"/>
</rewrites>
</urlrewritingnet>

I got error message "File does not exist" I wrote DefaultRule at last in web.config file.

How I resolved it...?

EDITED

Examples Suppose that my website url: www.abcd.com
1) For advanced rule I wrote URL like this www.abcd.com/advanced
Rule:

<add name="advanced" virtualUrl="^~/advanced" rewriteUrlParameter="ExcludeFromClientQueryString" destinationUrl="~/advancedSearch.aspx" ignoreCase="true"  /> 

2) for Default user rule for suppose username: AdvancedEyecare it used default rule

 <add name="DefaultRule" virtualUrl="^~/(.*)" rewriteUrlParameter="ExcludeFromClientQueryString" destinationUrl="~/UserProfile.aspx?uname=$1" ignoreCase="true"/>

When I enter url like http://www.abcd.com/AdvancedEyecare
Then I got error "File not exist" because Rule used 1 advanced rule not used user default rule. I want to call userrule instead of 1 advanced rule. How can solve it?

2

There are 2 best solutions below

5
On BEST ANSWER

Put an $ at the end of the first pattern:

<add name="advanced" virtualUrl="^~/advanced$" destinationUrl="~/advancedSearch.aspx" />

This will only match /advanced and rewrite it to /advancedSearch.aspx:

http://www.abcd.com/advanced -> http://www.abcd.com/advancedSearch.aspx

The other rewrite you want is

http://www.abcd.com/AdvancedEyecare -> http://www.abcd.com/UserProfile.aspx?uname=AdvancedEyecare   
1
On

At first I would change the order of the rewrite rules.

<rule name="GroupDefaultRule">
     <match url="Group" />
     <action type="Rewrite" url="Page2.aspx?action=group" />
</rule>
<rule name="Group1Rule">
     <match url="(.*)/Group" />
      <action type="Rewrite" url="page1.aspx?action=group&amp;uname={R:1}" />
</rule>

Nevertheless, why would OlewinskiGroup be matched into "(.*)/Group" ? There is no slash present