3

我使用 ASP.Net MVC 3 为客户端构建了一个网站,该网站旨在替换我没有构建并用 PHP 编写的旧网站。

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

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

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

是否有人对如何纠正此问题提出建议,理想情况下将用户重定向到新目的地(如果存在),或者只是将它们默认为主页。

4

2 回答 2

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

于 2013-04-06T20:17:42.093 回答
2

You can use this route:

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

And then implement PhpRedirectController like this:

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);
        }
    }
}
于 2013-04-06T20:21:20.973 回答