.net 2.0的URL重写导致搜索引擎302重定向错误的Bug及其解决方法-完美版-小事一箩筐

来源:互联网 发布:youtube download mac 编辑:程序博客网 时间:2024/06/01 08:17

最近在服务器的日志中出现许多Web事件的警告信息。时间间隔非常规律,一分钟出现一至两次,其错误信息摘取关键部分如下:

事件类型:    警告
事件来源:    ASP.NET 2.0.50727.0
事件种类:    Web 事件
事件 ID:    1309
日期:        2008-1-13
事件:        14:43:41
用户:        N/A
描述:
事件代码: 3005
事件消息: 发生了未处理的异常。
事件时间: 2008-1-13 14:43:41
事件时间(UTC): 2008-1-13 6:43:41
事件 ID: f94c4a45b696449db6df2a3d571059e3
事件序列: 110527
事件匹配项: 9121
事件详细信息代码: 0

异常信息:
    异常类型: HttpException
    异常消息: 无法使用前导 .. 在顶级目录上退出。
请求信息:
    请求 URL: http://www.xiaoshiyiluokuang.com/articles/all/9feb25b247ef405abfc5d96c9b670bcc

    请求路径: /articles/all/9feb25b247ef405abfc5d96c9b670bcc

    用户主机地址: 66.249.66.38
    用户: 
    是否已经过身份验证: False
    身份验证类型: 
    线程帐户名: NT AUTHORITY/NETWORK SERVICE
线程信息:
    线程 ID: 1
    线程帐户名: NT AUTHORITY/NETWORK SERVICE
    是否正在模拟: False
    堆栈跟踪:    在 System.Web.Util.UrlPath.ReduceVirtualPath(String path)
   在 System.Web.Util.UrlPath.Reduce(String path)
   在 System.Web.Util.UrlPath.Combine(String appPath, String basepath, String relative)
   在 System.Web.HttpResponse.ApplyAppPathModifier(String virtualPath)
   在 System.Web.UI.HtmlControls.HtmlForm.GetActionAttribute()
   在 System.Web.UI.HtmlControls.HtmlForm.RenderAttributes(HtmlTextWriter writer)
   在 System.Web.UI.HtmlControls.HtmlControl.RenderBeginTag(HtmlTextWriter writer)
   在 System.Web.UI.HtmlControls.HtmlForm.Render(HtmlTextWriter output)
   在 System.Web.UI.Control.RenderControlInternal(HtmlTextWriter writer, ControlAdapter adapter)
   在 System.Web.UI.Control.RenderControl(HtmlTextWriter writer, ControlAdapter adapter)
   在 System.Web.UI.HtmlControls.HtmlForm.RenderControl(HtmlTextWriter writer)
   在 System.Web.UI.Control.RenderChildrenInternal(HtmlTextWriter writer, ICollection children)
   在 System.Web.UI.Control.RenderChildren(HtmlTextWriter writer)
   在 System.Web.UI.Page.Render(HtmlTextWriter writer)
   在 System.Web.UI.Control.RenderControlInternal(HtmlTextWriter writer, ControlAdapter adapter)
   在 System.Web.UI.Control.RenderControl(HtmlTextWriter writer, ControlAdapter adapter)
   在 System.Web.UI.Control.RenderControl(HtmlTextWriter writer)
   在 System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint)

最初以为是源代码中的问题,打开源码仔细分析没有找到逻辑上的错误,不得其解。查找主机的IP地址,发现居然是GoogleBot 搜寻引擎机器人,后来在网上看到一篇文章,Get GoogleBot to crash your .NET 2.0 site

才知道这是由于ASP.NET 2.0 本身的一个bug造成的。

在网上搜索到好多解决方法,但是都不能最终完美解决。最后综合了几种方法之后找到一个行之有效的解决方法:

其实就是在web.config的system.web这个节点下面加上下面的就可以了

 

 

  <browserCaps>
      <filter>
        <!-- SEARCH ENGINES GROUP -->
        <!-- check Google (Yahoo uses this as well) -->
        <case match="^Googlebot(/-Image)?/(?'version'(?'major'/d+)(?'minor'/./d+)).*">
          browser=Google
          version=${version}
          majorversion=${major}
          minorversion=${minor}
          crawler=true
        </case>
        <!-- check Google -->
        <case match="Googlebot">
          browser=Googlebot
          crawler=true
        </case>

        <!-- check Alta Vista (Scooter) -->
        <case match="^Scooter(/|-)(?'version'(?'major'/d+)(?'minor'/./d+)).*">
          browser=AltaVista
          version=${version}
          majorversion=${major}
          minorversion=${minor}
          crawler=true
        </case>

        <!-- check Alta Vista (Mercator) -->
        <case match="Mercator">
          browser=AltaVista
          crawler=true
        </case>

        <!-- check Slurp (Yahoo uses this as well) -->
        <case match="Slurp">
          browser=Slurp
          crawler=true
        </case>

        <!-- check MSN -->
        <case match="MSNBOT">
          browser=MSN
          crawler=true
        </case>
        <!-- check Northern Light -->
        <case match="^Gulliver/(?'version'(?'major'/d+)(?'minor'/./d+)).*">
          browser=NorthernLight
          version=${version}
          majorversion=${major}
          minorversion=${minor}
          crawler=true
        </case>

        <!-- check Excite -->
        <case match="ArchitextSpider">
          browser=Excite
          crawler=true
        </case>

        <!-- Lycos -->
        <case match="Lycos_Spider">
          browser=Lycos
          crawler=true
        </case>

        <!-- Ask Jeeves -->
        <case match="Ask Jeeves">
          browser=AskJeaves
          crawler=true
        </case>

        <!-- check Fast -->
        <case match="^FAST-WebCrawler/(?'version'(?'major'/d+)(?'minor'/./d+)).*">
          browser=Fast
          version=${version}
          majorversion=${major}
          minorversion=${minor}
          crawler=true
        </case>

        <!-- IBM Research Web Crawler -->
        <case match="http/:////www/.almaden.ibm.com//cs//crawler">
          browser=IBMResearchWebCrawler
          crawler=true
        </case>

      </filter>
      frames=true
      tables=true
      cookies=true
      javascript=true
      javaapplets=true
      ecmascriptversion=1.5
      w3cdomversion=1.0
      css1=true
      css2=true
      xml=true
      tagwriter=System.Web.UI.HtmlTextWriter
    </browserCaps>

注意,上面的这些不要动,基本上放在web.config的system.web节点下面就可以!~

大家可以去我的小站试试,看看效果,另外就是去google或者雅虎看看有没有类似“http://www.xiaoshiyiluokuang.com/articles/all/9feb25b247ef405abfc5d96c9b670bcc”这样的网址收录。验证一下。

现在把方法公布出来,是希望有相同问题的朋友能够迅速解决问题,让我们一起共建美好的网络家园。

 

转帖请著名来源:小事一箩筐 版权所有

参考文章

Url重写 与 google yahoo 蜘蛛(3)

扩展 Request.Browser.crawler 支持的searching engine

.net 2.0的URL重写导致的Bug及其解决方法

 

小事一箩筐-有你好看

小事一箩筐,让你笑翻了^_^

原创粉丝点击