ここでいくつかのこと:
503 エラーを返したい理由がわかりません。ボットは、同じサーバー リソースの一部を引き続き使用します。
ボットのセッション管理を無効にする (または少なくともセッション タイムアウトを最小限に抑える) ことを検討する必要があります。
ボットをブロックしようとしている場合は、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>