编写SEO友好的URL获取无限循环asp.net

时间:2015-05-25 13:04:36

标签: c# asp.net regex url-rewriting

我正在尝试为我的网站编写SEO友好的URL。为此我在global.asax中编写了以下代码。

 protected void Application_BeginRequest(object sender, EventArgs e)
    {

        HttpContext incoming = HttpContext.Current;
        string oldpath = incoming.Request.Path;
        string imgId = string.Empty;
        //   string imgName = string.Empty;
        Regex regex = new Regex(@"N/(.+)", RegexOptions.IgnoreCase | RegexOptions.IgnorePatternWhitespace);
        MatchCollection matches = regex.Matches(oldpath);

        if (matches.Count > 0)
        {

            imgId = matches[0].Groups[1].ToString();
            // imgName = matches[0].Groups[2].ToString();
            string newPath = String.Concat("~/inner.aspx?Id=", imgId);
            incoming.RewritePath(String.Concat("~/inner.aspx?Id=", imgId), false);
        }

    }

但是当正则表达式匹配时,此代码会进行无限循环。当我在此代码中应用调试器时,它在正则表达式匹配时无限移动。请帮我解决这个问题。

2 个答案:

答案 0 :(得分:0)

似乎与Regex有关的问题。

这可能是由于过度回溯。详细了解回溯here

如果您使用的是ASP.Net 4.5版,请尝试使用.NET 4.5的新Regex超时功能here

答案 1 :(得分:0)

您需要注意,您的正则表达式设置为忽略大小写,因此n会在第一个/之前被捕获。

您需要获取最后一个n以及所有不是/的内容:

Regex regex = new Regex(@"N/([^/]+)$", RegexOptions.IgnoreCase);

或者,使用区分大小写的搜索:

Regex regex = new Regex(@"N/(.+)");