旧版PHP URL不会在MVC中调用自定义路由

时间:2013-02-15 20:47:39

标签: asp.net-mvc routing

我们最近用asp.net MVC网站替换了一个旧的php网站。为了防止搜索引擎中旧版网址出现404错误,我们通过 - http://www.mikesdotnetting.com/Article/108/Handling-Legacy-URLs-with-ASP.NET-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中的设置来解决问题。就好像请求永远不会出现控制器代码,错误或其他情况。所有其他页面/路由工作都很完美。

1 个答案:

答案 0 :(得分:3)

找到答案。

问题是由于如果扩展名是.php,iis永远不会启动asp.net服务。

解决方案是转到属性>主目录>配置,找到.php扩展名,将可执行路径更改为asp.net路径,并将其限制为“GET,HEAD,POST,DEBUG”或您喜欢的任何内容。我最初选择了“All Verbs”单选按钮,但这不起作用。

虽然该页面没有明确提出我想出的答案,this page确实有所帮助。