【发布时间】:2012-03-13 13:02:02
【问题描述】:
我正在尝试使用 IIS URLRewriter 在我的 Web 应用程序中编写入站和出站 URL,如下所示:
www.domain.net/SomeSite.aspx 到 www.domain.net/SomeSite 使用此 RegEx 进行入站:
^([A-Za-z0-9]+)([\?A-Za-z0-9=&]+)?$,令我惊讶的是,这确实有效,也适用于 www.domain.net/SomeSite.aspx?abc=1 => www.domain.net/SomeSite?abc=1 等 URL,使用此重写操作:{R:1}.aspx?{R:2}
但现在,对于 Outbound,我希望获得相同的效果,以便用户实际看到 www.domain.net/SomeSite,即使我的 web 应用程序可能在内部引用 ~/SomeSite.aspx。
我为此使用以下正则表达式:
^([A-Za-z0-9]+).aspx([\?A-Za-z0-9=&#]+)?$ 并像这样重写 URL:/{R:1}{R:2}
一般来说这是可行的,唉,它不适用于例如Response.Redirect 在 CodeBehind 中执行,它也不适用于来自 asp:Buttons 的 PostBackUrls。
有没有人知道如何重写这个出站规则,以便无论我如何引用它,它都能真正捕获每个链接?
谢谢,
丹尼斯
编辑:
一些例子,因为我想我并没有我想的那么清楚:
用户在浏览器中输入www.domain.com/Login,入站规则捕获并重定向到www.domain.com/Login.aspx,但在地址栏中显示/Login,这种行为很好。
但是,当我单击带有 PostBackUrl Login.aspx 的 asp:Button 时,地址栏将显示 Login.aspx 而不是所需的 Login,如何获得这种行为?
【问题讨论】:
-
为什么不把 PostBackUrl 改成 /Login 而不是 Login.aspx?我认为应该可以工作,至少我是这样处理普通锚标签的(省去了 Outbound 必须这样做!)
-
是的,这行得通,但它会非常不方便,因为我需要在 IIS 而不是开发服务器上进行调试。
标签: c# asp.net iis url-rewriting urlrewriter.net