【问题标题】:RedirectPermanent - MVC and short(er) URLRedirectPermanent - MVC 和短 URL
【发布时间】:2017-05-06 11:35:54
【问题描述】:

我正在使用域/控制器/操作的默认路由配置。

例如,www.domain/Appointment/RequestAppointment 调用 Appointment 控制器和 RequestAppointment ActionResult。

我们的营销人员经常要求我为我们的 URL 的较短版本构建重定向,以便在社交媒体或广告牌上使用。

因此,他们希望将www.domain/Appointment/RequestAppointment 视为www.domain/appointment

这样做没有问题,在这种情况下,我只是:

//Appointment Controller
public ActionResult Index()
    {
        return RedirectToAction("RequestAppointment");
    }

现在,我们的 SEO 人员告诉我,新 URL (www.domain/appointment) 正在返回 302 重定向(我理解),这对 SEO 不利。他们想要一个 301。

所以,我知道我可以使用以下方法返回(从 SEO 角度来看所需的)301 重定向:

//Appointment Controller
public ActionResult Index()
    {
        return RedirectPermanent("http://www.domain.com/Appointment/RequestAppointment");

    }

它有效,但有没有更好的方法或最佳实践来处理这个问题?我想这不会那么罕见,但我找不到任何东西。

我还必须对其他大约 10 个属于 www.domain/controller/action/id 格式的唯一 URL 执行相同的操作,这些 URL 将被重定向到 www.domain/promotion

【问题讨论】:

  • 你要找的不是RedirectToActionPermanent吗?
  • 为什么要在应用程序代码中处理这个?为什么不在服务器级别处理它?你说你有10个这些?你能用一个正则表达式匹配它们吗?在您的网络服务器配置中进行模式匹配和永久重定向并完成。

标签: c# url asp.net-mvc


【解决方案1】:

您无需为这些设置重定向。您可以将路由引擎设置为自动将给定的 URL 映射到特定的控制器操作,即使它与给定的默认结构不匹配。请记住,这些必须是BEFORE默认路由。您可以根据需要添加任意数量的这些,它们将返回 200,甚至不会返回 301。

routes.MapRoute("Request Appointment",
                "appointment", // <= What you want the URL after "www.domain" to be
                new { controller = "Appointment", action = "RequestAppointment" });

请记住,如果您想执行索引操作,则需要将 URL 设置为“约会/索引”。但是,任何其他类型的映射也是如此。但是,您可以使用以下两个 URL 访问同一页面,而不会发生服务器或客户端重定向:

www.domain.com/appointment

www.domain.com/appointment/requestappointment

【讨论】:

    猜你喜欢
    • 2013-07-05
    • 1970-01-01
    • 2014-04-23
    • 2014-09-04
    • 2013-03-28
    • 2012-03-19
    • 2012-01-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多