2014-01-20 125 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等)。