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

时间:2017-12-13 19:05:24

标签: asp.net asp.net-mvc azure azure-devops

我有一个在Azure应用服务中运行的ASP.NET MVC应用程序,其中包含一个临时插槽,以及Profiles中的构建和发布管道。

我希望生产实例始终在暂存插槽中的robots.txt和VSTS中有Allow /

目前我们每次进行交换时都会手动更改robots.txt,但这很容易出错

  

如何自动完成此过程?

为了解决这个问题,我考虑过根据Azure门户中设置的应用程序设置动态创建robots.txt文件(设置为保留在插槽中),但是这在交换发生后不会起作用prod将有暂存Disallow /规则。

有人可以建议最好的方法来管理吗?

2 个答案:

答案 0 :(得分:5)

搜索引擎主要使用机器人来抓取和检查公共网站上的网页。暂存和其他部署插槽不是公共的(并且不应该是公共的 - 除非您有充分的理由),因此配置和管理它没有多大意义。其次,在大多数情况下,我会建议将任何公共请求重定向到您的生产广告位,并仅针对内部用例保持暂存和暂停。这也可以帮助您管理仅来自公众的分析和日志,而不会受到内部和部署插槽内容的污染。

无论如何,如果你仍然倾向于这样做,那么有一种方法可以解决这个问题。编写自己的路由来控制机器人文件,然后呈现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的创建方式,并且您可以控制机器人的禁止权限。您只能在应用程序的主控制器中创建单独的控制器或操作。

现在您知道该怎么做了,您可以设置生产/临时插槽的环境变量来检查其他要求。

答案 1 :(得分:0)

我使用下面的代码,它适用于我

[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>