4

我们最近用 asp.net MVC 网站替换了一个旧的 php 网站。为了防止搜索引擎中遗留 url 出现 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 中找到解决问题的设置。就好像请求永远不会命中控制器代码、错误或其他。所有其他页面/路由都运行良好。

4

1 回答 1

3

找到了答案。

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

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

尽管该页面没有明确给出我想出的答案,但该页面确实有所帮助。

于 2013-02-15T21:03:25.290 回答