ASP.NET MVC 301重定向

9
我们过去使用ISAPI Re-Write(实际上它仍然在我们的服务器上),尽管它无法与ASP.Net MVC配合使用(与'euxd' get参数有关)。
当我们更改网站结构、上传新网站等时,我们需要一个可靠的方法来实现简单的301重定向。有什么建议吗?
好的,如果我想将/SomeFolder/SomePage.HTML?Param1=X 重定向到 /NewPage/X,我们该如何做?

你是否想将非MVC页面请求重定向到MVC控制器操作,就像你的示例一样? - Nathan Taylor
正确,将旧页面(之前用PHP编写的网站)转移到新的使用.Net MVC 3编写的页面。 - LiamB
你将在新服务器上运行哪个版本的IIS? - Charlino
@Charlino 同一个服务器,只是一个新的网站,使用的是IIS7。 - LiamB
如果您正在使用IIS7,我建议使用官方的IIS7 URL Rewrite模块。请参见下面的答案。 - Charlino
5个回答

37
在MVC 3中,控制器有三种新的重定向方法可以用于永久重定向(生成301);与MVC 2重定向产生的302(临时重定向)相反。
  • RedirectPermanent
  • RedirectToActionPermanent
  • RedirectToRoutePermanent
public ActionResult OldAction()
{
  return RedirectPermanent(urlname);
}
在 PluralSight 的这些教程的 Controllers 部分有一份很棒的教程。

1
你还需要在那里加上一个return - Ian Mercer
1
Hightechrider - 添加了返回语句 - Mr. Flibble

3

刚刚发现这个,正好符合我们的需求!! - LiamB

2
将非MVC页面重定向到MVC控制器操作的最佳方法是使用类似UrlRewriting.net这样的库,它使用HttpModule处理每个请求并将其分派到特定位置。
例如:将对“/faq.asp”的请求重定向到“/faq”:
<add name="faq.asp" virtualUrl="^~/faq.asp([\?#].*)?$"
            destinationUrl="~/faq"
            redirect="Application"
            redirectMode="Permanent"
            ignoreCase="true" />

当您将驱动 UrlRewriting.Net 的 HttpModule 添加到 Web.config 中时,请确保在自动定义的 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>

1

我刚刚写了一篇博客,介绍了一个简单的解决方案,使用ASP.NET MVC和XML文件来存储301重定向映射。

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


0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接