通过IIS Url重写模块重写的URL上的Response.Redirect

时间:2010-08-09 15:15:22

标签: asp.net iis-7 url-rewriting

我正在使用IIS Url Rewrite模块重写我的ASP.Net Web应用程序的URL。网址正在改写:

http://domain/version/page.aspx

http://domain/company/page.aspx

使用绝对路径直接浏览时效果很好。使用相对路径在应用程序中导航时会出现问题。 任何种相对路径。

所有相对路径都会重定向到相应的http://domain/version/page.aspx,而不是重定向到它应该去的http://domain/COMPANY/page.aspx

我通过将此行添加到Global.asax中的BeginRequest事件来解决了很多问题:

Protected Sub Application_BeginRequest(ByVal sender As Object, ByVal e As System.EventArgs)
    HttpContext.Current.RewritePath(HttpContext.Current.Request.Url.AbsolutePath, True)
End Sub

基本上它只是将虚拟路径重新定位到请求的URL。

但即使有了Response.Redirect STILL重定向到实际路径而不是虚拟路径。

因此,此代码:Response.Redirect("~/test.aspx")将重定向到domain/Version/test.aspx而不是domain/Company/test.aspx

如何将Response.Redirect重定向到虚拟路径(domain/COMPANY/test.aspx)而不是实际路径(domain/VERSION/test.aspx

感谢。

1 个答案:

答案 0 :(得分:2)

两个选项。你可以这样做:

Response.Redirect("/company/test.aspx")

Response.Redirect("http://domain/company/test.aspx")

这是使用动态URL的挑战之一,如果您打算使用动态URL,则需要处理这些挑战。

最好的解决方案可能是编写一个所有页面都可以看到的功能。那样你就可以写:

MyRedirectFunction("test.aspx")

所有细节都在幕后。