我们最近用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中的设置来解决问题。就好像请求永远不会出现控制器代码,错误或其他情况。所有其他页面/路由工作都很完美。
答案 0 :(得分:3)
找到答案。
问题是由于如果扩展名是.php,iis永远不会启动asp.net服务。
解决方案是转到属性>主目录>配置,找到.php扩展名,将可执行路径更改为asp.net路径,并将其限制为“GET,HEAD,POST,DEBUG”或您喜欢的任何内容。我最初选择了“All Verbs”单选按钮,但这不起作用。
虽然该页面没有明确提出我想出的答案,this page确实有所帮助。