【问题标题】:Verifying Googlebot in .htaccess file在 .htaccess 文件中验证 Googlebot
【发布时间】:2014-04-12 09:40:26
【问题描述】:

我已经调查了一下。下面的代码会起作用吗?没那么容易查。

RewriteEngine on
HostnameLookups Double  
RewriteCond %{REMOTE_HOST} (\.googlebot\.com) [NC] 
RewriteRule ^(.*)$ /do-something [L,R]

我最担心的部分

HostnameLookups Double 

它在某些地方说只能在 httpd.confg、vps、目录中工作(如果不是 .htaccess 但在 htaccess 中没有说,则不知道这最后意味着什么)。 你对这个问题有了解吗?

【问题讨论】:

    标签: apache .htaccess googlebot


    【解决方案1】:
    # Validate Googlebots
    RewriteCond %{HTTP_USER_AGENT} ^Mozilla/5\.0\ \(compatible;\ Googlebot/2\.[01];\ \+http://www\.google\.com/bot\.html\)$
    RewriteCond %{HTTP:Accept} ^\*/\*$
    RewriteCond %{HTTP:Accept-Encoding} ="gzip,deflate"
    RewriteCond %{HTTP:Accept-Language} =""
    RewriteCond %{HTTP:Accept-Charset} =""
    RewriteCond %{HTTP:From} ="googlebot(at)googlebot.com"
    RewriteCond %{REMOTE_ADDR} ^66\.249\.(6[4-9]|7[0-9]|8[0-46-9]|9[0-5])\. [OR]
    RewriteCond %{REMOTE_ADDR} ^216\.239\.(3[2-9]|[45][0-9]|6[0-3])\.0
    # Optional reverse-DNS-lookup replacement for IP-address check lines above
    # RewriteCond %{REMOTE_HOST} ^crawl(-([1-9][0-9]?|1[0-9]{2}|2[0-4][0-9]|25[0-5])){4}\.googlebot\.com$
    RewriteRule ^ - [S=1]
    # Block invalid Googlebots
    RewriteCond %{HTTP_USER_AGENT} Googlebot [NC]
    RewriteRule ^ - [F]
    

    请注意,可选的反向 DNS 行仅适用于允许使用反向 DNS 查找的服务器。

    此外,一旦触发此 rDNS 查找,您的访问日志文件的格式将发生变化;它不再将 IP 地址显示为每行的第一个条目,而是显示远程主机名。这会极大地影响您的服务器管理过程,并可能导致某些“统计”程序停止正确报告服务器访问摘要。一旦您的服务器进入此模式,它将保持这种状态,直到重新启动。

    如果您具有服务器配置权限,则可以轻松更改日志文件格式,使其显示 Remote_Addr 而不是 Remote_Host 作为每行的第一个条目,无论是否通过更改日志格式中的第一个令牌来启用 rDNS %h 到 %a。请参阅 Apache mod_log_config

    【讨论】:

      【解决方案2】:

      您可以使用带有%{HTTP_USER_AGENT} 变量的条件:

      RewriteEngine on
      
      RewriteCond %{HTTP_USER_AGENT} ^googlebot
      RewriteRule ^(.*)$ /do-something [L,R]
      

      但请记住,%{HTTP_USER_AGENT} 可以被欺骗。

      【讨论】:

      • 我把变化放在上面。你有意见吗。
      • 以上部分:RewriteEngine on HostnameLookups Double RewriteCond %{REMOTE_HOST} (\.googlebot\.com) [NC] RewriteRule ^(.*)$ /do-something [L,R]跨度>
      • 其实我不太了解HostnameLookups Double,如果那是你最关心的。
      • Anubhava 我在这里放了 IP 范围问题的链接。这对你来说应该很容易。 stackoverflow.com/questions/22299133/…
      • HTTP_USER_AGENT 可以被欺骗,所以这是不可靠的。
      【解决方案3】:

      在 .htaccess 中:

      Order Allow, Deny
      
      Allow from googlebot.com
      Allow from search.msn.com
      Allow from crawl.yahoo.net
      Allow from baidu.com
      Allow from yandex.ru
      Allow from yandex.net
      Allow from yandex.com
      

      也许其他一些搜索引擎也是个好主意?

      来自 Apace 文档:http://httpd.apache.org/docs/2.2/mod/mod_authz_host.html#allow

      ...它将对 IP 地址进行反向 DNS 查找以查找 关联的主机名,然后对主机名进行正向查找 以确保它与原始 IP 地址匹配。只要前锋 和反向 DNS 是一致的,并且主机名匹配将访问 允许。

      【讨论】:

      • 你测试过这个吗?当用户代理为googlebot 时,它将如何加载/do-something
      • 是的,它有效,Google 提供了这个测试工具:support.google.com/webmasters/answer/…。请记住,“用户代理”很容易被欺骗,因为它只是由发出请求的任何软件添加到 HTTP 请求中的文本字符串。例如,您可以使用 chrome.google.com/webstore/detail/user-agent-switcher-for-c/… 更改您的 Chrome 用户代理。从 googlebot 的角度来看,/do-something 页面将像任何公共页面一样被加载。
      • 问题不是它是否可以爬取。当用户代理为googlebot 时,它将如何服务/do-something URI?是的,我知道欺骗。
      • 嗯,不确定我现在是否理解您的问题。 Web 服务器正在“服务”,如果允许访问,它将以通常的方式进行。用户代理无关紧要。这有帮助吗?
      • 啊,是的,仔细阅读后,我想你是对的。我专注于标题“在 .htaccess 文件中验证 Googlebot”。对 -1 @anubhava 感到抱歉,除非您的答案被编辑,否则 Stack Overflow 不允许我更改它……非常好。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-09-15
      • 1970-01-01
      • 2012-06-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多