2

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?

Mathew Thompson
  • 55,877
  • 15
  • 127
  • 148
Abhishek B.
  • 5,112
  • 14
  • 51
  • 90
  • Do `~/UserProfile.aspx` exists? The rewrite rules changed quite dramatically from your previous Page1.aspx / Page2.aspx scenario. – tiago2014 Mar 07 '11 at 05:20
  • Give some examples of (ORIGINAL ADDRESS -> REWRITTEN ADDRESS) pairs you need. – tiago2014 Mar 07 '11 at 05:21
  • Hi @tiagoinu ~/UserProfile.aspx is exists. – Abhishek B. Mar 07 '11 at 06:08
  • Hi @tiagoinu Original file "~/AdvancedSearch.aspx" Rewrittern address "^~/advanced".. – Abhishek B. Mar 07 '11 at 06:10
  • @Abhishek Could you add some expected rewrite examples to your question? I mean complete URLs, like "`http://domain.com/abc/dce` -> `http://domain.com/something?arg=else`". – tiago2014 Mar 07 '11 at 06:10
  • Default Page Rule: http://domain.com/UserProfile.aspx?uname=AdvancedEyecare -> http://domain.com/AdvancedEyecare ... – Abhishek B. Mar 07 '11 at 06:21
  • @tiagoinu I first wrote advanced rule then wrote user default rule [http://domain.com/advancedSearch.aspx](http://domain.com/advancedSearch.aspx) -> [http://domain.com/advanced](http://domain.com/advanced) that all... – Abhishek B. Mar 07 '11 at 06:25

2 Answers2

1

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   
tiago2014
  • 3,392
  • 1
  • 21
  • 28
  • Yes. "^" means the start of the address, and "$" means the end of it. (Regular expression syntax.) – tiago2014 Mar 07 '11 at 06:30
  • Thanks a lot @tiagoinu Its great answer I appreciate your quiet support.. Good yaar.. Can we make friends? – Abhishek B. Mar 07 '11 at 06:31
  • @Abhishek Just curious, but are you using the Microsoft URL Rewrite module? http://www.iis.net/download/urlrewrite – tiago2014 Mar 07 '11 at 06:34
  • @Abhishek I asked because maybe you will want to configure rewriting.net to stop processing the next rules after the first match. I don't know how it works (the Microsoft one is simpler). – tiago2014 Mar 07 '11 at 06:42
  • @Abhishek Good luck with your project! – tiago2014 Mar 07 '11 at 06:51
0

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

citronas
  • 19,035
  • 27
  • 96
  • 164
  • Thanks @citronas Ans: Our requirement is that /Group so we identify the group from that username so we need two separate rules. I tried Above code but not worked.. Is any another solution for that? – Abhishek B. Feb 24 '11 at 07:16