自定义站点地图处理程序导致站点无法加载(Sitecore)

时间:2019-01-23 21:28:41

标签: redirect triggers sitecore handler pipeline

我正在尝试向我的网站添加自定义处理程序,以重定向到当前语言的相应Sitemap,即mysite.com/sitemap.xml-> sitemap-en.xml,mysite.es / sitemap.xml -> sitemap-es.xml等

这是我的设置:

处理程序触发补丁:

<configuration xmlns:patch="http://www.sitecore.net/xmlconfig/">
<sitecore>
    <customHandlers>
        <handler trigger="sitemap.xml" handler="sitemap.ashx" />
    </customHandlers>
</sitecore>
</configuration>

web.config:

<add path="sitemap.ashx" verb="*" type="MySite.CustomSitecore.Handlers.SitemapHandler,MySite" name="SitemapXml" />

处理程序:

namespace MySite.CustomSitecore.Handlers
{
public class SitemapHandler : IHttpHandler
{
    public bool IsReusable
    {
        get
        {
            throw new NotImplementedException();
        }
    }

    public void ProcessRequest(HttpContext context)
    {
        try
        {
            var curSite = Sitecore.Context.Site;
            var m_Sites = SitemapManagerConfiguration.GetSites();
            foreach (DictionaryEntry site in m_Sites)
            {
                if (site.Key.ToString().Equals(curSite.Name))
                {
                    var filepath = site.Value;
                    HttpContext.Current.Response.Redirect("/" + filepath, false);
                    return;
                }
            }
            return;
        }
        catch (Exception ex)
        {
            Log.Info("Error in SitemapHandler: " + ex, this);
        }
    }
}
}

但是,当我尝试转到mysite.com/sitemap.xml并对其进行调试时,它没有按预期的那样逐步完成重定向过程,并且看起来好像应该成功地重定向到/sitemap-en.xml,但是页面只是旋转并显示浏览器错误,提示无法加载该页面。

我尝试了几种不同的重定向方法,但是没有任何效果。我也尝试过:

HttpContext.Current.Response.StatusCode = 200;                         
HttpContext.Current.Response.ContentType = "text/xml";
HttpContext.Current.Response.AddHeader("Location", "/" + filepath);
HttpContext.Current.Response.End();
return;

1 个答案:

答案 0 :(得分:0)

不确定这是否是问题,但现成的Sitecore不允许使用.xml文件。安全加固。 您可以在配置中使用类似的方法来添加.xml扩展名

<configuration xmlns:patch="http://www.sitecore.net/xmlconfig/">
  <sitecore>
    <pipelines>
      <preprocessRequest help="Processors should derive from Sitecore.Pipelines.PreprocessRequest.PreprocessRequestProcessor">
        <processor type="Sitecore.Pipelines.PreprocessRequest.FilterUrlExtensions, Sitecore.Kernel">
          <param desc="Allowed extensions (comma separated)">aspx, ashx, asmx, xml</param>
        </processor>
      </preprocessRequest>
    </pipelines>
  </sitecore>
</configuration>

但是我认为是更好的解决方案,请使用默认值并认真对待安全性。 通过使用robots.txt告诉搜索引擎站点地图的网址是什么

User-agent: *   
Sitemap: /sitemap.ashx