【问题标题】:Response.Redirect on Page with Url Rewritten by IIS Url Rewrite ModuleResponse.Redirect 页面上的 URL 由 IIS Url 重写模块重写
【发布时间】:2010-08-09 15:15:21
【问题描述】:

我正在使用 IIS Url Rewrite 模块为我的 ASP.Net Web 应用程序重写 URL。正在从以下位置重写 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 仍然会重定向到实际路径而不是虚拟路径。

所以这段代码:Response.Redirect("~/test.aspx") 将重定向到domain/Version/test.aspx 而不是domain/Company/test.aspx

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

谢谢。

【问题讨论】:

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


    【解决方案1】:

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

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

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

    这是使用动态 URL 的挑战之一,如果您要使用它们,您必须应对这一挑战。

    可能最好的解决方案是编写一个您的所有页面都可以看到的函数来为您执行此操作。这样你就可以写了:

    MyRedirectFunction("test.aspx")
    

    所有细节都在幕后。

    【讨论】:

    • 无论如何,这就是我要走的路……遗憾的是,这是唯一的好路。
    猜你喜欢
    • 2013-08-16
    • 2011-12-04
    • 2012-06-01
    • 1970-01-01
    • 2013-04-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-07
    相关资源
    最近更新 更多