2012-03-13 124 views
0

我试着写在我的Web应用程序都In-和出站使用IISS URLRewriter像这样的网址:IIS URL重写出境PostBackUrls

www.domain.net/SomeSite.aspxwww.domain.net/SomeSite使用这个正则表达式入站:

^([A-Za-z0-9]+)([\?A-Za-z0-9=&]+)?$,多出乎我的意料,这实际工作,也为网址,如www.domain.net/SomeSite.aspx?abc=1 =>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=&#]+)?$和重写,像这样的网址:/{R:1}{R:2}

一般来说这个作品,唉,如果不是确实为例如Response.Redirect在CodeBehind中执行,它也不适用于asp:Button s的PostBackUrl

有没有人有任何想法如何重写这个出站规则,因此它实际上捕获每个链接,无论我如何引用它?

感谢,

丹尼斯

编辑:

一些例子,因为我想我是不是很清楚,因为我以为:

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

但是,当我点击即一个asp:按钮与PostBackUrl Login.aspx地址栏将显示Login.aspx而不是所需的Login,如何得到这种行为?

+0

为什么不将PostBackUrl更改为/ Login而不是Login.aspx?我*认为*应该工作,至少这是我如何处理正常的锚点标记(保存出站不得不这样做,然后!) – ianbailey 2012-03-13 16:53:45

+0

是的,这会工作,但它会是令人惊讶的不方便,因为我需要做我在IIS上调试,而不是在开发服务器上。 – 2012-03-13 22:25:56

回答

0

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

<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>