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

Vin*_*mth 4 asp.net asp.net-mvc azure azure-devops

我有一个带有一个临时插槽的Azure应用程序服务中运行的ASP.NET MVC应用程序,并在中建立和发布管道VSTS

我希望生产实例始终都Allow /位于robots.txt和Disallow /登台插槽中。

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

如何使该过程自动化?

为了解决此问题,我确实考虑过根据Azure门户中设置的应用程序设置(设置为与插槽保持一致)动态创建robots.txt文件,但这将不起作用,因为交换发生后prod将具有暂存Disallow规则。

任何人都可以建议最好的方法来解决此问题吗?

Afz*_*han 6

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

无论如何,如果您仍然愿意这样做,那么可以通过一种方法来管理它。编写自己的路由来控制robots文件,然后呈现一个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);
}
Run Code Online (Sandbox Code Playgroud)

这样,您可以管理robots.txt的创建方式,并且可以控制机械手的允许不允许。您只能在应用的主控制器中创建单独的控制器或操作。

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