2013-04-06 63 views
3

我已經爲使用ASP.Net MVC 3的客戶端構建了一個網站,該網站用於替換我未構建並使用PHP編寫的舊網站。在MVC中重定向來自舊網站的請求

大多數使用我有新的網站地圖上一個老從原來的頁面,如www.mysite.com/contactus的是www.mysite.com/contactus.php

審查後我的錯誤日誌(由Elmah記錄)我收到了一些舊頁面的請求錯誤,如下所示:

路徑'/ContactUs.php'的控制器未找到或未實現IController。

有沒有人有關於如何解決此問題的建議,理想情況下是將用戶重定向到新的目的地(如果它存在或只是將其默認爲主頁)。

回答

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); 
     } 
    } 
} 
+0

將這項工作包含子目錄的網址? – 2013-04-06 20:29:17

+0

@AntP:我已經更新了我的答案,以便它在那種情況下也能正常工作。 – 2013-04-06 21:17:32