实施Sitecore Multisite Robots.txt文件

时间:2013-10-31 13:34:07

标签: sitecore sitecore6

如何实现为托管在同一Sitecore解决方案上的每个网站提供不同的robots.txt文件。我想从sitecore项目中读取dinamically robots.txt。

4 个答案:

答案 0 :(得分:7)

您需要按照以下步骤操作:

1)创建并实现自定义通用(.ashx)处理程序。

2)在web.config文件中,将以下行添加到

部分

3)导航到该部分并在此处添加

4)在家庭项目上,您将拥有“机器人”字段(备注或多行字段,而不是richText字段) 您的自定义通用处理程序将如下所示:

 public class Robots : IHttpHandler
{

    public virtual void ProcessRequest(HttpContext context)
    {
        private string defaultRobots = "your default robots.txt content ";

        string robotsTxt = defaultRobots;

        if ((Sitecore.Context.Site == null) || (Sitecore.Context.Database == null))
        {
            robotsTxt = defaultRobots;
        }
        Item itmHomeNode = Sitecore.Context.Database.GetItem(Sitecore.Context.Site.StartPath);
        if (itmHomeNode != null)
        {
            if ((itmHomeNode.Fields["Robots"] != null) && (itmHomeNode.Fields["Robots"].Value != ""))
            {
                robotsTxt = itmHomeNode.Fields["Robots"].Value;
            }
        }

        context.Response.ContentType = "text/plain";
        context.Response.Write(robotsTxt);

    }

答案 1 :(得分:1)

我们遇到了类似的问题,特别是在多站点环境中,所以我们使用处理程序来实现robots.txt

创建一个继承自IHTTPHandler的新类,并在process方法中实现逻辑。将XML输出写入上下文对象。

context.Response.ContentType = "text/plain";
context.Response.Output.Write({XML DATA});

添加自定义处理程序和触发器。

  <handler trigger="~/Handlers/" handler="robots.txt"/>

  <add name="{Name}" path="robots.txt" verb="*" type="{Assembly Name and Type}" />

答案 2 :(得分:1)

似乎如果你想访问Sitecore Context和任何项目,你需要等待,直到这些东西得到解决。 aboce方法将始终在站点定义中为null,因为当文件处理程序启动时,这不会得到解决。

似乎要获取Sitecore.Context,您应该在Sitecore中实现一个HttpRequestProcessor,它渲染robots.txt,这个例子在这个网站上: http://darjimaulik.wordpress.com/2013/03/06/how-to-create-handler-in-sitecore/

答案 3 :(得分:0)

您可以参考此博客文章,了解如何使用自定义HttpRequestProcessor和自定义漫游器设置模板执行此操作:http://nsgocev.wordpress.com/2014/07/30/handling-sitecore-multi-site-instance-robots-txt/