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 に答える