我已经使用ASP.Net MVC 3为客户建立了一个网站,它是为了取代我没有构建并用PHP编写的旧网站而构建的。
我在新网站上的大部分页面都是原始网页上的旧网页,例如www.mysite.com/contactus曾经是www.mysite.com/contactus.php
在查看我的错误日志(由Elmah记录)后,我收到一些旧页面请求的错误,如下所示:
未找到路径'/ContactUs.php'的控制器或未实现IController。
是否有人对如何纠正此问题进行了推荐,理想情况是将用户重定向到新目的地(如果存在),或者仅将其默认为主页。
答案 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);
}
}
}