【发布时间】:2013-05-09 08:33:30
【问题描述】:
我有一个“顶级”网站www.ccesd.ac.uk,以及运行它的各种“低级”网站,例如www.ccesd.ac.uk/BritSocAt,它们是独立的网站,但共享大量代码。这些较低级别的站点在 IIS 7.5 中被指定为 Web 应用程序,并从 www.ccesd.ac.uk 继承一个公共 web.config 文件,尽管它们存在于自己的应用程序池中。
我已经为 IIS 7.5 配置了 URL 重写模块,这样较低级别的站点就可以拥有自己不同的 URL,例如www.BritSocAt.com,映射到 www.ccesd.ac.uk/BritSocAt。
每个站点都有自己的 Global.asax 文件,其中包含为漂亮 URL 定义的 URL 路由规则。这些 URL(/Home、/About、/Contact 等)对所有网站都是通用的,包括顶级 (ccesd.ac.uk) 网站。
void Application_Start(object sender, EventArgs e)
{
// Code that runs on application startup
RegisterRoutes(System.Web.Routing.RouteTable.Routes);
}
// ** URL ROUTING **
private static void RegisterRoutes(System.Web.Routing.RouteCollection routes)
{
routes.Ignore("{resource}.axd/{*pathInfo}");
// HOME
routes.MapPageRoute("Home", "Home", "~/Body.aspx", false, new System.Web.Routing.RouteValueDictionary
{ { "control", "HomePage" } });
// CONTACT US
routes.MapPageRoute("ContactUs", "Contact", "~/Body.aspx", false, new System.Web.Routing.RouteValueDictionary
{ { "control", "CCESDContactUs" } });
// ABOUT US
routes.MapPageRoute("AboutUs", "About", "~/Body.aspx", false, new System.Web.Routing.RouteValueDictionary
{ { "control", "CCESDMissionStatement" } });
}
我从 Ruslan Yakushev 的excellent tutorial 了解到,IIS URL 重写模块是在 Global.asax 中的 ASP.NET 路由之前处理的。这是我需要它的工作方式。但是,如果我键入 www.britsocat.com/About,我发现正在使用 www.ccesd.ac.uk 的 Global.asax 文件! (我已经在测试中验证了这一点。)此外,这发生在 IIS URL 重写之前。换句话说,提供的结果页面是 www.ccesd.ac.uk/Body.aspx?control=CCESDMissionStatement 而不是 www.ccesd.ac.uk/ BritSocAt /Body.aspx?control=CCESDMissionStatement.
我怀疑这是因为我在两个站点(Global.asax 文件)中都有相同的路由规则(“关于”)。我想我可以通过更改其中一个文件中的规则名称来解决这个问题;但这通常是不可取的,尤其是对于“Home”。
有什么我遗漏的或者我可以做些什么来解决它吗?
【问题讨论】:
-
只是一个快速的想法,你能确保在使用failed request tracing tool之前没有调用重写模块
-
@cheesemacfly - 很好的建议,谢谢。我以前没用过这个工具。
标签: iis url-rewriting url-routing global-asax