IIS URL重写出站PostBackUrl
本文关键字:PostBackUrl 重写 URL IIS | 更新日期: 2023-09-27 18:27:42
我正试图使用IISsURLRevriter在我的Web应用程序中写入URL,包括In-和Outbound,比如:
www.domain.net/SomeSite.aspx
到www.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:Button
s中的PostBackUrl
s。
有人知道如何重写这个出站规则,这样无论我如何引用它,它都能捕获每个链接吗?
谢谢,
Dennis
编辑:
一些例子,因为我想我并没有想象的那么清楚:
用户在浏览器中输入www.domain.com/Login
,Inbound Rule捕获并重定向到www.domain.com/Login.aspx
,但在地址栏中显示/Login
,这种行为很好。
然而,当我点击PostBackUrl为Login.aspx
的asp:Button时,地址栏将显示Login.aspx
,而不是所需的Login
,如何获得确切的这种行为?
事实证明,我唯一需要做的就是添加一个入站重定向规则,并将两个规则的stopProcessing
设置为true。结果如下:
<rules>
<rule name="Clean URL" stopProcessing="true">
<match url="^([A-Za-z0-9]+)(['?A-Za-z0-9#=&]+)?$" />
<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'?#=&]+)?$" />
<action type="Redirect" url="{R:1}{R:2}" />
</rule>
</rules>