删除主页的“主页/索引”辅助路由

时间:2017-07-14 14:37:44

标签: asp.net-mvc asp.net-mvc-routing asp.net-routing

我有一个ASP.net MVC 5站点。主页位于http://mydomain

然而,还有第二条到主页的路线 - http://mydomain/home/index - 我认为

这会导致问题,因为它可能被视为重复内容,并且此页面上的图像已被破坏。

我怎样才能完全删除这条路线(所以它会进入404,我猜?)。

我搜索了Google,但只能找到关于完全从路径中移除Home的文章 - 而不是我需要的。

我正在使用属性路由,这就是RouteConfig.cs中的所有内容:

routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

// Enable Route Attributes in Controllers
routes.MapMvcAttributeRoutes();

// Fall through all routes
routes.MapRoute(
    name: "Default",
    url: "{controller}/{action}/{id}",
    defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);

Home Index操作没有属性路径(正如您可能期望的那样?)。这个/ home / index路由甚至可以用于新生成的MVC项目 - 我认为这是一个坏主意吗?

我该怎么做?

删除此路线是否有任何问题我可能没有考虑过?

THX。

2 个答案:

答案 0 :(得分:3)

您可以使用IgnoreRoute()阻止您不想要的非预期路线。

routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

routes.IgnoreRoute("Home");
routes.IgnoreRoute("Home/Index");

// Enable Route Attributes in Controllers
routes.MapMvcAttributeRoutes();

// Fall through all routes
routes.MapRoute(
    name: "Default",
    url: "{controller}/{action}/{id}",
    defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);

但是,如果这些网址已经存在,您应该设置301重定向到您想要的规范网址。最简单的方法是使用URL rewrite module

  

这个/ home / index路由甚至可以在新生成的MVC项目中运行 - 我认为这是一个坏主意?

我认为这更像是一种伪装的祝福。与使用MVC的任何搜索引擎优化竞争对手相比,当你是那个没有额外工作去除这些路线时,这是一个优势。

答案 1 :(得分:0)

这不是必需的。

默认路由提供可选控制器和操作名称。因此,如果用户没有为路径中的控制器和/或操作添加任何名称(/ Home / Index或/ Home),asp.net将在应用程序路由中放置正确的值。

每当您使用Url.ActionUrl.Route功能时,它都会为您生成最短链接因此,在您的网站中,将始终为您的根生成http://mydomain。例如,类别>它将产生的索引操作http://mydomain/category

在您的网站中,如果您的链接是这样的话,机器人将永远不会复制内容。如果您手动编写链接,请尽可能简短地写,或者只使用Url.Action

关于图像必须有不同的东西,因为图像是静态文件。只需使用"〜/ imagefolder / imagename.jpg"得到他们的方式。 "的"如果要使应用程序在IIS中的子文件夹上工作,则从应用程序的根目录开始链接非常重要。