【问题标题】:URL rewrite rule conflits in IIS?IIS 中的 URL 重写规则冲突?
【发布时间】:2013-03-19 22:38:36
【问题描述】:

我在 URL 重写规则中遇到问题。 我在 asp.net 网站中使用 UrlRewritingNet.UrlRewriter Dll 进行 Url 重写。 我使用规则名称作为“高级” & 其他规则名称为 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。

我是怎么解决的...?

已编辑

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

<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 个高级规则。 怎么解决?

【问题讨论】:

  • ~/UserProfile.aspx 存在吗?与之前的 Page1.aspx / Page2.aspx 方案相比,重写规则发生了巨大变化。
  • 举一些你需要的(原始地址 -> 重写地址)对的例子。
  • 嗨@tiagoinu ~/UserProfile.aspx 存在。
  • 嗨@tiagoinu 原始文件“~/AdvancedSearch.aspx” 重写地址“^~/advanced”..
  • @Abhishek 您能否在您的问题中添加一些预期的重写示例?我的意思是完整的 URL,例如“http://domain.com/abc/dce -> http://domain.com/something?arg=else”。

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


【解决方案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   

【讨论】:

  • 是的。 “^”表示地址的开始,“$”表示地址的结束。 (正则表达式语法。)
  • 非常感谢@tiagoinu 它的好答案感谢您的安静支持.. 好呀.. 我们可以交朋友吗?
  • @Abhishek 只是好奇,但您使用的是 Microsoft URL Rewrite 模块吗? iis.net/download/urlrewrite
  • @Abhishek 我问是因为您可能想要配置 rewriting.net 以在第一场比赛后停止处理下一个规则。我不知道它是如何工作的(微软的更简单)。
  • @Abhishek 祝您项目顺利!
【解决方案2】:

一开始我会改变重写规则的顺序。

<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" ?没有斜线

【讨论】:

  • 感谢@citronas Ans:我们的要求是 /Group 所以我们从该用户名中识别组,所以我们需要两个单独的规则。我尝试了上面的代码但没有工作..还有其他解决方案吗?
猜你喜欢
  • 1970-01-01
  • 2011-11-21
  • 2023-03-07
  • 2014-10-27
  • 2012-09-01
  • 2014-05-01
  • 2012-06-09
相关资源
最近更新 更多