【问题标题】:IIS URL Rewrite Outbound PostBackUrlsIIS URL 重写出站 PostBackUrls
【发布时间】:2012-03-13 13:02:02
【问题描述】:

我正在尝试使用 IIS URLRewriter 在我的 Web 应用程序中编写入站和出站 URL,如下所示:

www.domain.net/SomeSite.aspxwww.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


【解决方案1】:

事实证明,我唯一需要做的就是添加一个入站重定向规则并将两个规则的 stopProcessing 设置为 true。结果如下:

<rules>
        <rule name="Clean URL" stopProcessing="true">
            <match url="^([A-Za-z0-9]+)([\?A-Za-z0-9#=&amp;]+)?$" />
            <action type="Rewrite" url="{R:1}.aspx{R:2}" />
        </rule> 
        <rule name="CleanTest" stopProcessing="true">
            <match url="^([a-z0-9/]+).aspx([a-zA-Z0-9\?#=&amp;]+)?$" />
            <action type="Redirect" url="{R:1}{R:2}" />
        </rule>
</rules>

【讨论】:

    猜你喜欢
    • 2011-02-03
    • 1970-01-01
    • 1970-01-01
    • 2011-07-15
    • 2018-07-15
    • 2013-07-01
    • 2016-06-27
    • 2013-06-16
    相关资源
    最近更新 更多