2

我们对 IIS 8 有一个小问题。

我们一直在尝试使 cfheader 标记与 503 错误一起工作,但每次它似乎都会生成一个由 IIS 生成的简单纯文本页面。

我们已经放弃了让它看起来漂亮的尝试,并提出了一个漂亮的解决方案。无论如何,它的一部分。

我们的想法是在浏览时简单地为机器人生成一个 503 页面,并为人类生成一个干净的页面。

下面是代码。

<cfif findNoCase("googlebot", cgi.HTTP_USER_AGENT)>
    <cfset today = dateFormat(now(), 'dd/mm/yy')&timeFormat(now(), 'HH:mm:ss')>
    <cfset urlString = "http://"&cgi.SERVER_NAME>
    <cfif len(trim(cgi.QUERY_STRING))>
      <cfset urlString = urlString&"?"&cgi.QUERY_STRING>
    </cfif>   
    <cfmail to="david.imrie@pistachiomedia.com.au" from="noreply@pistachiomedia.com.au" subject="Google Has Indexed the website #cgi.SERVER_NAME#">
      Google Detected @ #urlString#
    </cfmail>
    <!--- eventually alert the search engine --->
    <cfheader statuscode="503" statustext="Service Temporarily Unavailable"/>
    <cfheader name="retry-after" value="3600" />
<cfelse>

Beautiful page content here

</cfif>

我想知道的是......有人知道可以检测更广泛搜索引擎的UDF吗?因为我想让网站在搜索引擎浏览该网站时通知我。

谢谢

4

2 回答 2

0

这里有几件事:

  1. 我不确定您为什么要返回 503 错误。该机器人仍然占用一些相同的服务器资源。

  2. 您应该考虑禁用机器人的会话管理(或至少最小化会话超时)。

  3. 如果您试图阻止机器人,您还应该使用 robots.txt(有关这方面的详细信息,请参见http://www.robotstxt.org/ )。

    您很可能已经在使用 robots.txt,但以后访问此页面的任何人都应该注意这一点。

下面的 UDF 基于Ben Nadel 的工作。但是,其中的数据应该保持更新。

我最终可能会按照我在自己的 SpamFilter.cfc 中使用的模式来执行此操作。不过,就目前而言,以下一对 UDF 应该可以帮助您入门。

请注意,我的 UDF 将 CFSCHEDULE 视为机器人,因为我不想为其使用会话。如果要阻止所有机器人,则应将其从列表中删除。

<cffunction name="hasCFCookies" access="public" returntype="boolean">
    <cfreturn ( StructKeyExists(Cookie,"CFID") AND StructKeyExists(Cookie,"CFTOKEN") )>
</cffunction>
<cfset request.hasCFCookies = hasCFCookies>

<cffunction name="isBot" access="public" returntype="boolean">
    <!---

    Based on code by Ben Nadel:
    http://www.bennadel.com/blog/154-ColdFusion-Session-Management-Revisited-User-vs-Spider-III.htm
    --->

    <cfset var UserAgent = "">

    <!--- If the user has cookies, this is at least a second request from a real user --->
    <cfif hasCFCookies()>
        <cfreturn false>
    </cfif>

    <!--- Real users have user-agent strings --->
    <cfset UserAgent = LCase( CGI.http_user_agent )>
    <cfif NOT Len(UserAgent)>
        <cfreturn true>
    </cfif>


    <!---
    High-probability checks
    If the user agent has bot or spider in it, it is a bot
    Some specific high-volume spiders listed individually
    --->
    <cfif
            REFind( "bot\b", UserAgent )
        OR  Find( "spider", UserAgent )
        OR  REFind( "search\b", UserAgent )
        OR  UserAgent EQ "CFSCHEDULE"
    >
        <cfreturn true>
    </cfif>

    <!---
    If we haven't yet tagged it as a bot and it is on Windows or Mac (including iOs devices), call it a real user.
    If this results in a few spiders showing as real users that is OK
    --->
    <cfif REFind( "\windows\b", UserAgent ) OR REFind( "\bmac", UserAgent )>
        <cfreturn false>
    </cfif>

    <!--- If we don't know yet, only figure spiders from a known list of a few --->
    <cfif
            REFind( "\brss", UserAgent )
        OR  Find( "slurp", UserAgent )
        OR  Find( "xenu", UserAgent )
        OR  Find( "mediapartners-google", UserAgent )
        OR  Find( "zyborg", UserAgent )
        OR  Find( "emonitor", UserAgent )
        OR  Find( "jeeves", UserAgent )
        OR  Find( "sbider", UserAgent )
        OR  Find( "findlinks", UserAgent )
        OR  Find( "yahooseeker", UserAgent )
        OR  Find( "mmcrawler", UserAgent )
        OR  Find( "jbrowser", UserAgent )
        OR  Find( "java", UserAgent )
        OR  Find( "pmafind", UserAgent )
        OR  Find( "blogbeat", UserAgent )
        OR  Find( "converacrawler", UserAgent )
        OR  Find( "ocelli", UserAgent )
        OR  Find( "labhoo", UserAgent )
        OR  Find( "validator", UserAgent )
        OR  Find( "sproose", UserAgent )
        OR  Find( "ia_archiver", UserAgent )
        OR  Find( "larbin", UserAgent )
        OR  Find( "psycheclone", UserAgent )
        OR  Find( "arachmo", UserAgent )
    >
        <cfreturn true>
    </cfif>

    <cfreturn false>
</cffunction>
于 2013-11-15T03:05:40.203 回答
0

您可以使用 BrowscapCFC。我使用我自己的检测库来专门识别好的和坏的蜘蛛,但是用它来进行额外的检测,它是一个“Crawler”参数(以及“isMobileDevice”。)使用它可以让你识别(并选择性地停止网络请求) 在创建任何会话变量之前。

http://browscapcfc.riaforge.org/

注意:通过访问http://browscap.org/获取最新的 browscap.ini 文件

以下是返回的其他值:

  • ActiveX 控件
  • Α
  • 美国版
  • 背景声音
  • 贝塔
  • 浏览器
  • 评论
  • 饼干
  • 履带式
  • CSS版本
  • 设备_制造商
  • 设备名称
  • 框架
  • 框架
  • Java小程序
  • JavaScript
  • 主要版本
  • 小版本
  • 平台
  • 平台_描述
  • 平台_版本
  • RenderingEngine_Description
  • 渲染引擎名称
  • RenderingEngine_Version
  • VBScript
  • 版本
  • Win16
  • Win32
  • Win64
  • isMobileDevice
  • isSyndicationReader
于 2013-11-15T19:36:19.750 回答