0

我正在尝试使用 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=>之类的 URL,www.domain.net/SomeSite?abc=1使用此重写操作:{R:1}.aspx?{R:2}

但是现在,对于出站,我希望具有相同的效果,以便用户实际看到www.domain.net/SomeSite,即使我的 web 应用程序可能在内部引用 ~/SomeSite.aspx。

我为此使用以下正则表达式:

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

唉,一般来说,它不能Response.Redirect在 CodeBehind 中执行,也不能用于PostBackUrls from asp:Buttons。

有谁知道如何重写此出站规则,以便它实际上捕获每个链接,而不管我如何引用它?

谢谢,

丹尼斯

编辑:

一些例子,因为我想我并不像我想的那么清楚:

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

但是,当我单击带有 PostBackUrlLogin.aspx的 asp:Button 时,地址栏将显示Login.aspx而不是所需的Login,如何获得这种行为?

4

1 回答 1

0

事实证明,我唯一需要做的就是添加一个入站重定向规则并将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>
于 2012-03-14T12:13:56.967 回答