我在IIS 7中运行了一个HTTPModule,提供了许多不同的URL重写服务。
例如:
public void Init(HttpApplication context)
{
...
HttpContext.Current.RewritePath(landingPage.NewPath,
string.Empty,
landingPage.NewQueryString +
((landingPage.NewQueryString == string.Empty) ? "" : "&") +
queryString);
...
}
我有一个子应用程序,其自己的应用程序池用MVC编写: http://www.SomeSiteWithURLrewrite.com/SubMVCApplication/
除了作为子应用程序创建的MVC应用程序之外,此模块运行良好。
当我发出将被重写的http请求时: http://www.SomeSiteWithURLrewrite.com/Arbitrary/Path/To/Be/Rewritten
我收到HTTP错误404.0 - 未找到
404错误页面显示已调用“http://www.SomeSiteWithURLrewrite.com/Arbitrary/Path/To/Be/Rewritten”并已重写为物理路径“C:{RootDirectory} \ SubMVCApplication \“与”StaticFile“的处理程序。
我不确定为什么pipline没有将“HttpContext.Current.RewritePath”识别为MVC请求。是因为MVC应用程序在自己的应用程序中吗?
如何调用RewritePath(或类似的东西)并让IIS在子应用程序中呈现ASP.Net MVC页面
答案 0 :(得分:2)
如果跨越应用程序边界,则需要执行Response.Redirect,该响应会发出基于客户端的HTTP 301重定向命令
ReWritePath是一个仅服务器命令,需要访问路由表等。因此只有当前的应用程序边界
除了在每个Web应用程序中使用页面代理来传递内容之外,没有简单的答案,但这将是非常低效的
e.g。 server.com/a/x重写为server.com/b/x,您的代码必须检测应用程序边界更改,而是重定向将发出HTTPRequest以获取server.com/b/x内容和将该内容传回客户端?资源路径等将成为一个大问题,所以可能不是一个好主意
答案 1 :(得分:0)
我完全不同意TFD's answer。 一切都取决于你想要实现的算法。
Here您可以找到有关路由和URL重写的详细说明。 至于我为什么要实现树基URL结构,最好在路由之前使用URL重写,以
转换网址:my.site.com/page1/page2/page3/faq.aspx
致:my.site.com/content/faq.aspx?parent=page3/page2/page1
其中content
是控制器名称,faq
是唯一标识符。
可以从数据库或站点地图文件中获取数据。