2009-07-29 45 views
2

我想尾随斜线添加到任意的URL匹配的有效途径,但目前并不在一个斜线结束的是,即www.example.com/url301重定向后的路线是匹配的,但控制器执行之前

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

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

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

我希望这很清楚,让我知道如果你需要更多的信息。

回答

0

我假设你正试图消除重复内容的搜索引擎优化目的。

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

+0

是的,我想确保我没有到多个内容相同的路径。 现在我正在运行IIS6,但我有一个重写模块安装,所以我可以使用这种方法,我想。这将重写所有传入的请求,但我只想重写有效的路由并保留无效的url。 我实际上最终在我的基础控制器上使用了一个动作过滤器来重写任何不以斜杠结尾的URL。到目前为止,这工作得很好。 看到这个URL我用什么... http://www.devproconnections.com/tabId/180/itemId/4576/Putting-the-IIS-SEO-Toolkit-to-work-with-ASPNET- M.aspx – Paul 2009-07-31 14:34:52

-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 + "/");    
     } 
    } 
}