我們最近用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來解決這個問題。就好像請求從不碰到控制器代碼,錯誤或其他。所有其他頁面/路由都可以正常工作。
您運行的是哪個版本的IIS? – 2013-02-15 20:53:22
您很可能需要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
爲什麼不在IIS中使用HTTP重定向模塊? – ZippyV 2013-02-15 20:59:09