【问题标题】:Url Forwarding for invalid routes?无效路由的 URL 转发?
【发布时间】:2012-09-17 04:45:54
【问题描述】:

我正在升级旧的 asp.net 网络表单站点。我想让 URL 看起来更好看,所以我使用路由系统,如下所示:

void RegisterRoutes(RouteCollection routes)
{
    routes.MapPageRoute("account settings",
        "settings/account/",
        "~/accountsettings.aspx");
}

这很好用。像mydomain.com/settings/account/ 这样的网址看起来好多了。但是,仍然可以使用其物理位置访问该页面,例如mydomain.com/accountsettings.aspx。我想将对这些旧表单 url 的请求转发到我的新 url。

最好的方法是什么?有没有像RegisterRoutes这样的简单方法?

【问题讨论】:

  • 我不确定是否有具体的方法,但是在每个页面上的Page_Init,如果url包含aspx扩展名,您可以使用Response.RedirectToRoute()重定向到正确的路由。

标签: c# asp.net url-routing


【解决方案1】:

我相信您需要让路由引擎知道使用 IgnoreRoute 忽略物理文件的路由:

routes.IgnoreRoute("accountsettings.aspx");

请仔细检查 IgnoreRoute 的语法,因为我不记得您是需要包含相对路径还是只包含文件名。

一旦你有这个工作,你可以捕获它将生成的 404,可能在 global.asax 的全局错误处理程序中,如果那是请求的路径,则重定向。这篇博文有一个如何在全局错误处理程序中捕获 404 的示例:http://www.andornot.com/blog/post/Handling-404-errors-with-ASPNET.aspx

如果这是一个公共网站并且您担心 SEO,您可能还需要考虑使用 http 状态代码 301 指定它是永久重定向。这将告诉 Google 和其他搜索引擎旧页面现在存在于新位置,您不会丢失该页面的价值。

希望有帮助!

【讨论】:

  • 这个方法听起来不错。我不太确定在一个地方忽略路线,然后在其他地方处理 404。我会看看我能不能想出办法一次性完成所有这些。
猜你喜欢
  • 2021-09-26
  • 1970-01-01
  • 2021-06-03
  • 1970-01-01
  • 1970-01-01
  • 2012-12-06
  • 2017-09-26
  • 1970-01-01
  • 2023-03-04
相关资源
最近更新 更多