[英]How can I manage robots.txt in Azure app service with a staging slot
我有一个ASP.NET MVC应用程序在Azure应用程序服务中运行,其中包含一个临时插槽,以及VSTS
的构建和发布管道。
我希望生产实例始终具有Allow /
in robots.txt和Disallow /
in staging slot。
目前我们每次进行交换时都会手动更改robots.txt,但这很容易出错
如何自动完成此过程?
为了解决这个问题,我考虑根据Azure门户中设置的应用程序设置动态创建robots.txt文件(设置为与插槽保持一致),但是这不起作用,因为在交换发生后prod将具有暂存Disallow
规则。
任何人都可以建议最好的方法来管理这个?
搜索引擎主要使用机器人来抓取和检查公共网站上的页面。 暂存和其他部署插槽不是公共的(并且不应该是公共的 - 除非您有充分的理由),因此配置和管理它没有多大意义。 其次,在大多数情况下,我建议将任何公共请求重定向到您的生产槽,并保持暂存离线并仅对内部用例有效。 这也可以帮助您管理仅来自公众的分析和日志,而不会受到内部和部署插槽内容的污染。
无论如何,如果你仍然倾向于这样做,那么有一种方法可以解决这个问题。 编写自己的路由来控制机器人文件,然后渲染content-type: text/plain
页面,根据它是暂存还是生产请求,它将是动态的。 像这样的东西,
// Create the robots.txt file dynamically, by controlling the URL handler
[Route("robots.txt")]
public ContentResult DynamicRobotsFile()
{
StringBuilder content = new StringBuilder();
content.AppendLine("user-agent: *");
// Check the condition by URL or Environment variable
if(allow) {
content.AppendLine("Allow: /");
else {
content.AppendLine("Disallow: /");
}
return this.Content(stringBuilder.ToString(), "text/plain", Encoding.UTF8);
}
通过这种方式,您可以管理robots.txt的创建方式,并且您可以控制机器人的禁止权限。 您只能在应用程序的主控制器中创建单独的控制器或操作。
既然您知道该怎么做,您可以设置生产/临时插槽的环境变量来检查其他要求。
我使用下面的代码,它适用于我
[Route("robots.txt")]
public ContentResult DynamicRobotsFile()
{
StringBuilder content = new StringBuilder();
if (System.Configuration.ConfigurationManager.AppSettings["production"] != "true")
{
content.AppendLine("user-agent: *");
content.AppendLine("Disallow: /");
}
return this.Content(content.ToString(), "text/plain", Encoding.UTF8);
}
web.config中
<appSettings>
<add key="production" value="false" />
</appSettings>
<system.webServer>
<handlers>
<add name="RobotsTxt" path="robots.txt" verb="GET" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" />
</handlers>
</system.webServer>
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.