我一直在开发一个新项目,该项目利用映射到 lambda 函数的 API 网关。 lambda 函数包含一个 Kestrel .NET Web 服务器,该服务器通过 API 网关通过代理接收请求。我已将 API Gateway 重新映射到实际的子域,以确保品牌一致性。一切正常;然而,我最近实现了 Elmah.IO,以便更好地了解在这种不寻常的情况下会出现什么错误。
现在,api 网关 URL 每天大约会收到一到五次无法完成的 robots.txt 文件请求。 我不希望 API 能够完成此请求,因为该 API 并不旨在提供静态内容。 我的问题是;我怎样才能阻止提出这些请求?
是什么导致API网关URL被请求?是因为它是通过我的主机站点的链接直接检测到的吗? 它使用 CORS 来访问 API,因此机器人可能会将 API 检测为完全独立的域并尝试对其进行爬网。 如果是这样,我是否可以在 Web API 中添加一些配置来强制我的设计对 robots.txt 请求进行文本响应?
网络爬虫会寻找他们能找到的任何 URL,并希望对所有内容建立索引。如果任何地方都有对您的 API 网关 URL 的引用,Googlebot 及其朋友很可能会找到它。他们没有任何理由提前知道域仅用于编程访问,从他们的角度来看,API URL 只是像任何其他 URL 一样。
行为良好的网络爬虫会在请求其他内容之前请求某个域的 robots.txt 文件,以查看它们是否应该加载该域上的任何其他页面。
我不想告诉人们他们问了错误的问题,但实际上你想要爬虫提出请求。这就是您如何告诉爬虫您“不”希望他们请求的其他页面。 robots.txt 约定的目的是,它应该是一种向爬虫传达您的愿望的简单方法。在网络的早期,将文本文件放入根文件夹非常容易。随着网络的发展,网站更多地以编程方式驱动,而不是文件驱动,因此该约定有点难以处理。但你无法真正“阻止”爬虫请求 robots.txt,因为它们在处理该主机名之前无法知道是否应该访问该主机名上的其他 URL,因此它们总是会尝试请求它。你只需要处理它。 我可以在 Web API 中添加一些配置来强制我的设计对 robots.txt 请求进行文本响应吗? 以下是我为 API 网关创建 robots.txt 所采取的步骤:
创建一个新资源,名称为
robots.txt
robots.txt
。请注意,默认情况下,控制台将尝试将路径设置为
robots-txt
(改为连字符),因此您需要确保更改它。在“Integration Response”部分中,展开状态 200 的部分,展开“Body Mapping Templates”部分,然后单击
application/json
text/plain
,并将所需的 robots.txt 内容置于模板框中。单击“保存”。
返回并打开“方法响应”部分。展开状态 200 的部分,单击铅笔图标以编辑
application/json
text/plain
,然后单击复选标记保存。
部署到您的测试阶段,并确保 robots.txt URL 正常工作,并以
text/plain
经过一番研究后,我最终只是尝试动态生成 robots.txt 响应的文本文件。 我正在阅读这篇文章:http://rehansaeed.com/dynamically-generate-robots-txt-using-asp-net-mvc/
这给了我动态生成请求的想法。 因此,我设置了以下内容:
[Route("/")]
public class ServerController : Controller
{
[HttpGet("robots.txt")]
public ContentResult GetRobotsFile()
{
StringBuilder stringBuilder = new StringBuilder();
stringBuilder.AppendLine("user-agent: *");
stringBuilder.AppendLine("disallow: /"); // this will disallow all routes
return this.Content(stringBuilder.ToString(), "text/plain", Encoding.UTF8);
}
}