Asp.Net MVC 301重定向

时间:2011-02-11 09:43:39

标签: asp.net asp.net-mvc asp.net-mvc-3 http-status-code-301

我们曾经使用ISAPI重写(事实上它仍然在我们的服务器上)虽然它不能与ASP.Net MVC一起使用(与'euxd'得到参数有关)。

当我们更改网站结构,上传新网站等时,我们需要一种可靠的方式来实施简单的301重定向。有什么建议吗?

好的,我想将/SomeFolder/SomePage.HTML?Param1=X重定向到/ NewPage / X

我们怎么能这样做?

5 个答案:

答案 0 :(得分:37)

在MVC 3中,有三种新的重定向方法可以在控制器中用于永久重定向(产生301);而不是MVC 2重定向产生的302s(临时重定向)。

  • 永久重定向
  • RedirectToActionPermanent
  • RedirectToRoutePermanent
public ActionResult OldAction()
{
  return RedirectPermanent(urlname);
}

PluralSight的这些演练的Controllers部分有一个很棒的教程。

答案 1 :(得分:3)

如果您使用的是IIS7,我建议您使用官方IIS7 URL Rewrite module

答案 2 :(得分:2)

要执行从非MVC 页面到MVC控制器操作的重定向,最好的办法是使用像UrlRewriting.net或类似的库,它使用HttpModule来处理每个请求和将其发送到特定地点。

示例:将'/faq.asp'的请求重定向到'/ faq':

<add name="faq.asp" virtualUrl="^~/faq.asp([\?#].*)?$"
            destinationUrl="~/faq"
            redirect="Application"
            redirectMode="Permanent"
            ignoreCase="true" />

当你向你的Web.config添加为UrlRewriting.Net提供支持的HttpModule时,请确保在之前定义它由ASP.NET自动定义的UrlRoutingModule。否则,ASP.NET将尝试通过将您的请求映射到文件或控制器来处理您的请求,因此您可能会遇到一些意外问题。

<modules runAllManagedModulesForAllRequests="true">
    <add name="UrlRewriteModule" type="UrlRewritingNet.Web.UrlRewriteModule, UrlRewritingNet.UrlRewriter"/>
    <add name="UrlRoutingModule" type="System.Web.Routing.UrlRoutingModule, System.Web.Routing, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
</modules>

答案 3 :(得分:1)

我只是blogged关于使用ASP.NET MVC和XML文件存储301重定向映射的简单解决方案。

然而,根据Nathan Taylor的回答,如果您需要进行基于Regex的映射,我建议使用UrlRewriting.Net。

答案 4 :(得分:0)

实施自定义ActionResult。示例:http://www.stum.de/2008/10/22/permanentredirectresult/