【问题标题】:301 Redirect after a route is matched but before controller execution301 路由匹配后,控制器执行前重定向
【发布时间】:2010-11-15 06:00:20
【问题描述】:

我想在任何匹配有效路由但当前不以斜杠结尾的 url 添加一个尾部斜杠,即 www.example.com/url

在 url 与有效路由匹配后,我想 301 重定向到相同的 url,但添加尾部斜杠,即 www.example.com/url/

我花了一些时间研究它,但我似乎无法弄清楚。

我相信路由在 PostResolveRequestCache 事件中匹配,但我不知道如何在该事件期间或之后访问路由数据以查看是否匹配了有效路由。如果我可以确认匹配了有效路由,那么我可以检查 url 以确保它以斜杠结尾。

我希望这足够清楚,如果您需要更多信息,请告诉我。

【问题讨论】:

    标签: asp.net-mvc redirect routing seo


    【解决方案1】:

    我假设您正在尝试消除重复内容以用于 SEO 目的。

    Scott Hanselman 说您可以使用 IIS7 重写模块来执行此操作(您是否正在运行 IIS7?)他在http://www.hanselman.com/blog/ASPNETMVCAndTheNewIIS7RewriteModule.aspx 的帖子描述了该过程。

    【讨论】:

    • 是的,我试图确保我没有多个路径指向相同的内容。现在我正在运行 IIS6,但我安装了一个重写模块,所以我想我可以使用这种方法。不过,这会重写所有传入的请求,我只想重写有效的路由并保留无效的 url。我实际上最终在我的基本控制器上使用了一个动作过滤器来重写任何不以斜杠结尾的 url。到目前为止,这工作得很好。请参阅此网址了解我使用的内容...devproconnections.com/tabId/180/itemId/4576/…
    【解决方案2】:

    这听起来非常适合动作过滤器:

    public class EnforceTrailingSlashAttribute : ActionFilterAttribute
    {
       public override void OnActionExecuting(ActionExecutingContext filterContext)
       {
          if (!filterContext.HttpContext.Request.Path.EndsWith("/"))
          {
             filterContext.Result = new RedirectResult(
                filterContext.HttpContext.Request.Path + "/");            
          }
       }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-03-25
      • 2015-04-06
      • 1970-01-01
      • 2011-01-14
      • 2014-10-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多