IIS 中的 URL 重写规则发生冲突?

发布于 2024-10-19 03:22:27 字数 1733 浏览 3 评论 0原文

我在 URL 重写规则中遇到问题。 我使用 UrlRewritingNet.UrlRewriter Dll 在 asp.net 网站中进行 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 个高级规则。 怎么解决呢?

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?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

草莓味的萝莉 2024-10-26 03:22:27

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

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

这将匹配 /advanced 并将其重写为 /advancedSearch.aspx< /code>:

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

您想要的另一个重写是

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

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   
风透绣罗衣 2024-10-26 03:22:27

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

<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&uname={R:1}" />
</rule>

然而,为什么 OlewinskiGroup 会匹配到“(.*)/Group”呢?不存在斜线

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&uname={R:1}" />
</rule>

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

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文