【问题标题】:ASP.NET MVC - How to permanently redirect "action?id=5" style url's to "action/5"ASP.NET MVC - 如何将“action?id=5”样式的 url 永久重定向到“action/5”
【发布时间】:2013-12-27 14:20:36
【问题描述】:

我的 ASP.NET MVC 4 应用程序中有很多控制器和操作。

默认路由配置为:

routes.Add(
    new Route(
        url: "{controller}/{action}/{id}",
        defaults: new RouteValueDictionary(
            new {
                controller = "MyController",
                action = "Home",
                id = UrlParameter.Optional
            }
        ),
        routeHandler: new MvcRouteHandler()
    )
);

基于此默认路由配置,通过以下方式访问操作(控制器的方法):

http://example.com/controller/action/5

但是也可以通过以下方式访问它们:

http://example.com/controller/action?id=5

这对 SEO 不利(重复内容)。

有什么通用的方法可以将第二个请求(带有查询字符串)重定向(301)到第一个请求(没有查询字符串的那个)?

有些动作有多个参数名称可变,我想不出一个简单的解决方案。

【问题讨论】:

  • 如果它用于 SEO 优化,那么您可以使用 Canonical Url,它可以防止搜索引擎对您的页面进行重复索引。
  • @Neel 所以你的意思是我应该在每个页面中添加以下元标记:<link rel="canonical" href="http://example.com/controller/action/5" />
  • 不是在每个页面上,但是如果您将其添加到 example.com/controller/action?id=5 页面上,它将有助于让搜索引擎知道 - 不要将其复制为不同的内容
  • 我觉得够合理,谢谢! (顺便说一句,我既不能投票也不能回答你的评论,对不起。

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


【解决方案1】:

如果它用于 SEO 优化,那么您可以使用 Canonical Url,这将防止搜索引擎对您的页面进行重复索引 如果您将其添加到 example.com/controller/action?id=5 页面,它将起到让搜索引擎知道的目的——不要将其复制为不同的内容

【讨论】:

  • 这也将有助于避免对这些请求进行代价高昂的重定向。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-12-10
  • 1970-01-01
  • 2016-06-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多