Если вы перенаправляете виртуальный URL в физический файл, это довольно легко сделать в Global.asax:
protected void Application_Start(object sender, EventArgs e)
{
RegisterRoutes(RouteTable.Routes);
RouteTable.Routes.MapPageRoute("Key", "Home", "~/Public/Pages/Default.aspx");
}
В этом случае
http://www.example.com/Home
перенаправляет на
http://www.example.com/Public/Pages/Default.aspx
Просто для справки, это не перенаправляет на клиента, оно перенаправляетна сервере, что означает, что сервер не возвращает 302 с новым адресом, он просто отправляет обратно содержимое, на которое направляет его.
Это также удобно для добавления переменных, например:
routes.MapPageRoute("MainPublic3", "Public/Pages/{PAGE}/{CHILD}", "~/Public/Pages/Pages.aspx");
Затем к ним можно получить доступ в следующем коде:
string page = Page.RouteData.Values["PAGE"];
string child = Page.RouteData.Values["CHILD"];
Мы используем это для всего, где я работаю, конечно, мы переключаемся на MVC:)