繁体   English   中英

如何使用暂存插槽管理Azure应用服务中的robots.txt

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM