2014-01-20 96 views
1

我想只有当它是由谷歌访问用下面的代码来限制访问sitemap.xml只允许Google查看sitemap.xml?

reverse_dns = Resolv.getname(request.remote_ip) 
throw_404 unless reverse_dns.include?("goog") || reverse_dns.include?("localhost") 

但如果是IP地址的主机名失败。例如:

Resolv::ResolvError: no name for 64.233.191.255

这是一个谷歌机器人IP地址。

关于如何完成这个任务或者Stackoverflow如何做到这一点(Stackexchange将它的sitemap.xml限制为Google)。

回答

1

而不是使用反向DNS,使用whois - 因为一些谷歌的IP甚至没有反向dns记录设置。

所以,做一个完整的域名注册的IP,而不是使用whois宝石:

gem "whois"

whois = Whois.whois(request.remote_ip).parts[0]['body'] 
throw_404 unless whois.include?("google") || whois.include?("IANA Special Use") 

IANA Special Use通常是当你在查询本地网络的IP地址(127.0.0.1或10.0 .1.1等)。