I. *_*han 4 robots.txt amazon-web-services aws-api-gateway
我一直在开发一个新项目,该项目利用映射到 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 请求进行设计的文本响应?
小智 9
网络爬虫寻找他们能找到的任何 URL,并希望将所有内容编入索引。如果在任何地方都有对您的 API 网关 URL 的引用,那么 Googlebot 及其朋友很可能会找到它。他们没有任何理由提前知道域仅用于编程访问,从他们的角度来看,API URL 与其他 URL 一样。
行为良好的网络爬虫会在请求任何其他内容之前请求域的 robots.txt 文件,以查看它们是否应该加载域上的任何其他页面。
我不想告诉人们他们问错了问题,但实际上您希望爬虫提出请求。这就是您可以告诉抓取工具您不希望他们请求的其他页面的方式。robots.txt 约定的目的是它应该是一种向爬虫传达您的愿望的简单方法。在 Web 的早期,将文本文件放入根文件夹非常容易。随着网络的发展,站点更多地由程序驱动而不是文件驱动,因此约定有点难以处理。但你真的停不下来请求 robots.txt 的爬虫,因为在处理它之前,它们无法知道是否应该访问该主机名上的其他 URL,因此它们总是会尝试请求它。你只需要处理它。
以下是我为 API 网关创建 robots.txt 的步骤:
创建一个新的资源,名称robots.txt和路径robots.txt。请注意,robots-txt默认情况下,控制台将尝试使用路径(用连字符代替),因此您需要确保更改它。
为该资源创建一个新方法,用于 GET。
选择 Mock 的集成类型。
在“Integration Response”部分,展开状态 200 部分,展开“Body Mapping Templates”部分,然后单击application/json。将内容类型更改为text/plain,并将所需的 robots.txt 内容¹ 放入模板框中。单击保存。
返回并打开“方法响应”部分。展开状态 200 部分,单击铅笔图标以编辑application/json响应正文类型。将其更改为text/plain,然后单击对勾进行保存。
text/plainHEAD 和 GET的Content-Type 进行响应。¹ 我希望大多数 API 系统都希望使用标准方法来排除所有机器人:
Run Code Online (Sandbox Code Playgroud)User-agent: * Disallow: /
经过一番研究后,我最终尝试动态生成 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: *");
return this.Content(stringBuilder.ToString(), "text/plain", Encoding.UTF8);
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3738 次 |
| 最近记录: |