2013-02-15 36 views
4

我們最近用asp.net MVC網站替換了一箇舊的php網站。爲了防止搜索引擎中遺留網址的404錯誤,我們通過設置了一個定製的遺留路由系統 - http://www.mikesdotnetting.com/Article/108/Handling-Legacy-URLs-with-ASP.NET-MVC舊版PHP網址不會在MVC中調用自定義路由

該代碼在我的本地計算機上工作,並且它重定向到正確的路由;然而,現場服務器發出了404。紅利問題/線索,404不是我們的自定義404頁面,而是iis 6的默認頁面。

代碼:

public class LegacyUrlRoute: RouteBase 
{ 
    // source: http://www.mikesdotnetting.com/Article/108/Handling-Legacy-URLs-with-ASP.NET-MVC 
    public override RouteData GetRouteData(HttpContextBase httpContext) 
    { 
     const string status = "301 Moved Permanently"; 
     var request = httpContext.Request; 
     var response = httpContext.Response; 
     var legacyUrl = request.Url.ToString(); 
     var newUrl = ""; 

     if (legacyUrl.Contains(".php")) 
     { 

      newUrl = "/"; 
      if (legacyUrl.Contains("support/mailfilter.php")) 
       newUrl = "/support/"; 
      else if (legacyUrl.Contains("/support/default.php")) 
       newUrl = "/support/"; 
      else if (legacyUrl.Contains("/business/default.php")) 
       newUrl = "/services/"; 
      else if (legacyUrl.Contains("/residential/default.php")) 
       newUrl = "/services/"; 
      else if (legacyUrl.Contains("/about/default.php")) 
       newUrl = "/home/about/"; 
      else if (legacyUrl.Contains("/jobs.php")) 
       newUrl = "/jobs/"; 
      else if (legacyUrl.Contains("/support/links.php")) 
       newUrl = "/support/"; 
      else if (legacyUrl.Contains("/support/settings.php")) 
       newUrl = "/support/"; 
      else if (legacyUrl.Contains("/default.php")) 
       newUrl = "/"; 


      response.Status = status; 
      response.RedirectLocation = newUrl; 
      response.End(); 
     } 
     return null; 
    } 
    public override VirtualPathData GetVirtualPath(RequestContext requestContext, RouteValueDictionary values) 
    { 
     return null; 
    } 
} 

注:

我們懷疑問題是與IIS暫時無法服務於PHP頁面,但我似乎無法找到一個設置在iis來解決這個問題。就好像請求從不碰到控制器代碼,錯誤或其他。所有其他頁面/路由都可以正常工作。

+0

您運行的是哪個版本的IIS? – 2013-02-15 20:53:22

+3

您很可能需要a)讓IIS處理所有傳入的請求,或者b)將.php映射到aspnet_isapi.dll,以便當該文件類型的請求進入時,IIS將其發送到.NET處理程序,然後該處理程序將繼續打你的控制器/路由引擎。 http://haacked.com/archive/2008/11/26/asp.net-mvc-on-iis-6-walkthrough.aspx – Tommy 2013-02-15 20:58:20

+0

爲什麼不在IIS中使用HTTP重定向模塊? – ZippyV 2013-02-15 20:59:09

回答

3

找到了答案。

問題是由於iis從不啓動asp.net服務,如果擴展名是.php。

解決方案是去屬性>主目錄>配置,找到.php擴展名,將可執行路徑更改爲asp.net路徑,並將其限制爲「GET,HEAD,POST,DEBUG」或任何你喜歡。我最初選擇了「所有動詞」單選按鈕,但這不起作用。

雖然網頁並沒有具體的答案,但我想出了this page的確有幫助。

+3

好的廢話,我應該提交我的評論作爲答案:P – Tommy 2013-02-15 21:11:26

+0

你說得對,對不起。我輸入了答案,然後看到你的評論:(如果我沒有找到自己的答案,你的評論/答案肯定會指出我在正確的方向。 – jbaum012 2013-02-15 21:16:03