IIS URL重写出站PostBackUrl

本文关键字:PostBackUrl 重写 URL IIS | 更新日期: 2023-09-27 18:27:42

我正试图使用IISsURLRevriter在我的Web应用程序中写入URL,包括In-和Outbound,比如:

www.domain.net/SomeSite.aspxwww.domain.net/SomeSite使用此RegEx入站:

^([A-Za-z0-9]+)(['?A-Za-z0-9=&]+)?$,令我惊讶的是,这实际上也适用于使用此重写操作的URL,如www.domain.net/SomeSite.aspx?abc=1=>www.domain.net/SomeSite?abc=1{R:1}.aspx?{R:2}

但现在,对于Outbound,我希望有同样的效果,这样用户就可以真正看到www.domain.net/SomeSite,即使我的网络应用程序可能在内部引用~/SomeSite.aspx。

我使用以下RegEx:

^([A-Za-z0-9]+).aspx(['?A-Za-z0-9=&#]+)?$并像这样重写URL:/{R:1}{R:2}

遗憾的是,一般来说,这不适用于例如在CodeBehind中执行的Response.Redirect,也不适用于asp:Buttons中的PostBackUrls。

有人知道如何重写这个出站规则,这样无论我如何引用它,它都能捕获每个链接吗?

谢谢,

Dennis

编辑:

一些例子,因为我想我并没有想象的那么清楚:

用户在浏览器中输入www.domain.com/Login,Inbound Rule捕获并重定向到www.domain.com/Login.aspx,但在地址栏中显示/Login,这种行为很好。

然而,当我点击PostBackUrl为Login.aspx的asp:Button时,地址栏将显示Login.aspx,而不是所需的Login,如何获得确切的这种行为?

IIS URL重写出站PostBackUrl

事实证明,我唯一需要做的就是添加一个入站重定向规则,并将两个规则的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>