301路由匹配后但在控制器执行之前重定向

时间:2009-07-29 21:37:53

标签: asp.net-mvc redirect routing seo

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

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

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

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

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

2 个答案:

答案 0 :(得分:0)

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

Scott Hanselman说你可以使用IIS7 Rewrite模块执行此操作(你运行IIS7吗?)他在http://www.hanselman.com/blog/ASPNETMVCAndTheNewIIS7RewriteModule.aspx的帖子描述了这个过程。

答案 1 :(得分:-1)

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

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