加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

asp.net-mvc – 旧版PHP URL不会在MVC中调用自定义路由

发布时间:2020-12-16 09:52:56 所属栏目:asp.Net 来源:网络整理
导读:我们最近用asp.net MVC网站替换了一个旧的php网站.为了防止来自搜索引擎中遗留网址的404错误,我们通过- http://www.mikesdotnetting.com/Article/108/Handling-Legacy-URLs-with-ASP.NET-MVC设置了自定义遗留路由系统 代码在我的本地计算机上运行,??并重定向
我们最近用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中的设置来解决问题.就好像请求永远不会出现控制器代码,错误或其他情况.所有其他页面/路由工作完美.

解决方法

找到了答案.

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

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

虽然该页面没有特别提出我想出的答案,但this page确实有所帮助.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读