重定向来自MVC中旧网站的请求

时间:2013-04-06 20:06:19

标签: c# asp.net-mvc redirect

我已经使用ASP.Net MVC 3为客户建立了一个网站,它是为了取代我没有构建并用PHP编写的旧网站而构建的。

我在新网站上的大部分页面都是原始网页上的旧网页,例如www.mysite.com/contactus曾经是www.mysite.com/contactus.php

在查看我的错误日志(由Elmah记录)后,我收到一些旧页面请求的错误,如下所示:

未找到路径'/ContactUs.php'的控制器或未实现IController。

是否有人对如何纠正此问题进行了推荐,理想情况是将用户重定向到新目的地(如果存在),或者仅将其默认为主页。

2 个答案:

答案 0 :(得分:4)

您应该能够在web.config中使用IIS重写规则执行此操作:

<rewrite>
  <rules>
    <rule name="Remove .php suffix">
      <match url="^(.*).php$" />
      <action type="Rewrite" url="{R:1}" />
    </rule>
  </rules>
</rewrite>

这应该删除任何传入请求的'.php'后缀。有关详细信息,请参阅此处:http://www.iis.net/learn/extensions/url-rewrite-module/creating-rewrite-rules-for-the-url-rewrite-module

答案 1 :(得分:2)

您可以使用此路线:

routes.MapRoute(
    name: "oldphp",
    url: "{*path}",
    defaults: new { controller = "PhpRedirect", action="Get" },
    constraints: new { path = @".*\.php" });

然后像这样实施PhpRedirectController

public class PhpRedirectController : Controller
{
    [HttpGet]
    public ActionResult Get(string path)
    {
        // TryGetNewUrl should be implemented to perform the
        // mapping, or return null is there is none.
        string newUrl = TryGetNewUrl(path);
        if (newUrl == null)
        {
            // 404 not found
            return new HttpNotFoundResult();
        }
        else
        {
            // 301 moved permanently
            return RedirectPermanent(newUrl);
        }
    }
}