4

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

4

4 回答 4

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);

    }
于 2013-10-31T13:52:04.143 回答
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}" />
于 2013-10-31T13:48:38.733 回答
1

看来,如果您想访问 Sitecore 上下文和任何项目,您需要等到这些东西得到解决。aboce 方法将始终在 Site 定义中为您提供 null,因为当文件处理程序启动时,这并没有解决。

似乎要获取 Sitecore.Context,您应该在 Sitecore 中实现一个 HttpRequestProcessor,它呈现 robots.txt,本网站上的示例:http: //darjimaulik.wordpress.com/2013/03/06/how-to-在站点核心中创建处理程序/

于 2013-12-08T12:49:49.390 回答
0

您可以参考此博客文章,了解如何使用自定义 HttpRequestProcessor 和自定义机器人设置模板进行分步说明:http: //nsgocev.wordpress.com/2014/07/30/handling-sitecore-多站点实例机器人 txt/

于 2014-07-31T06:58:55.190 回答