【问题标题】:Asp.Net MVC 301 RedirectsAsp.Net MVC 301 重定向
【发布时间】:2011-06-25 10:47:52
【问题描述】:

我们曾经使用 ISAPI Re-Write(实际上它仍在我们的服务器上),尽管它不适用于 ASP.Net MVC(与 'euxd' 获取参数有关)。

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

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

我们怎样才能做到这一点?

【问题讨论】:

  • 您想将 non-MVC 页面请求重定向到您的示例中的 MVC 控制器操作吗?
  • 正确,所以旧页面(以前用 PHP 编写的站点)到用 .Net MVC 3 编写的新页面
  • 您要在新服务器上运行什么版本的 IIS?
  • @Charlino 同一台服务器只是一个新网站,它的 IIS7
  • 如果您使用的是 IIS7,我建议您使用官方的 IIS7 URL Rewrite Module。请参阅下面的答案。

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


【解决方案1】:

在 MVC 3 中,可以在控制器中使用三种新的重定向方法来永久重定向(产生 301);与 MVC 2 重定向产生的 302s(临时重定向)相反。

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

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

【讨论】:

  • 你也需要一个return
  • Hightechrider - 添加了退货声明
【解决方案2】:

我只是blogged 介绍了一个使用 ASP.NET MVC 和 XML 文件来存储 301 重定向映射的简单解决方案。

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

【讨论】:

    【解决方案3】:

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

    【讨论】:

    • 刚刚找到这个,非常适合我们的需要!!
    【解决方案4】:

    要执行从 非 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 时,请确保在 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>
    

    【讨论】:

      【解决方案5】:

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

      【讨论】:

        猜你喜欢
        • 2011-05-27
        • 2011-05-23
        • 2016-05-11
        • 2013-06-03
        • 2011-01-11
        • 2017-10-08
        • 2011-08-24
        • 1970-01-01
        • 2013-06-30
        相关资源
        最近更新 更多