IIS中的URL重写规则冲突?

时间:2011-02-24 06:53:08

标签: asp.net iis-7 url-rewriting urlrewriter.net

我在URL重写规则中遇到问题。 我在asp.net网站上使用 UrlRewritingNet.UrlRewriter Dll进行网址重写。 我使用规则名称为“高级” &安培;其他规则名称为DefaultRule,用于任何用户配置文件页面(即任何用户的配置文件页面)。 当我输入用户名“ AdvancedMachinesTools ”时。
该规则如下: -

<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>

我收到错误消息“文件不存在”我最后在web.config文件中写了DefaultRule。

我是如何解决的??

EDITED

实例 假设我的网站网址为:www.abcd.com
1)对于高级规则,我写了这个www.abcd.com/advanced的URL 规则:

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

2)用于默认用户规则 假设用户名:AdvancedEyecare它使用默认规则

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

当我输入http://www.abcd.com/AdvancedEyecare之类的网址时 然后我收到错误“文件不存在”,因为规则使用了1个高级规则而未使用用户默认规则。我想调用userrule而不是1个高级规则。 怎么解决呢?

2 个答案:

答案 0 :(得分:1)

$放在第一个模式的末尾:

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

匹配/advanced并将其重写为/advancedSearch.aspx

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

你想要的另一个重写是

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

答案 1 :(得分:0)

首先,我会更改重写规则的顺序。

<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>

然而,为什么OlewinskiGroup会被匹配成“(。*)/ Group”?没有斜线