我正在构建一项服务,当人们按照www.domain.com/this_is_a_hash格式链接时会收到通知(邮件)。使用此服务器的人可以在twitter,tumblr,facebook等不同地方分享此链接...
我遇到的主要问题是,只要在任何此平台上共享链接,就会向我的服务器发送大量请求www.domain.com/this_is_a_hash。这个问题是,每当其中一个请求命中我的服务器时,就会向this_is_a_hash的所有者发送通知,当然这不是我想要的。我只想在真实的人进入这个资源时收到通知。
我发现了一篇非常有趣的文章here,它讲述了服务器在发布到Twitter时收到的大量请求......
所以我需要的是避免搜索引擎点击“资源”网址... www.mydomain.com/this_is_a_hash
有什么想法吗?我正在使用rails 3。
谢谢!
答案 0 :(得分:1)
如果您不希望搜索引擎将这些网页编入索引,您可以使用robots.txt来屏蔽这些网址。
User-agent: *
Disallow: /
(这将阻止所有用户代理的所有URL。您可能希望添加一个文件夹以仅阻止其中的URL。或者您可以在创建时动态添加禁用URL,但是,某些机器人可能会缓存robots.txt已经有一段时间了,所以他们可能也不会意识到应该阻止新的URL。)
当然,只会阻止那些礼貌足以遵守robots.txt规则的机器人。
如果您的用户会复制并粘贴HTML,则可以使用nofollow
链接关系类型:
<a href="http://example.com/this_is_a_hash" rel="nofollow">cute cat</a>
然而,这不会非常有效,因为即使是支持此链接的某些搜索引擎也会still visit the pages。
或者,你可以要求JavaScript能够点击链接,但当然不是很优雅。
但我认为他们只会复制并粘贴普通网址,所以无论如何这都行不通。
因此,唯一的机会是在链接被点击后决定是机器人还是人。
您可以检查用户代理。您可以分析页面上的行为(例如,第一次点击需要多长时间)。或者,如果它对您非常重要,您可以强制用户输入CAPTCHA以便能够查看页面内容。当然,你永远无法使用这些方法捕获所有机器人。
您可以在页面上使用分析,例如Piwik。他们尝试将用户与僵尸程序区分开来,以便只有用户才会显示在统计信息中。我敢肯定,大多数分析工具都提供了一个API,可以为每次注册的访问发送邮件。