Пользовательский обработчик карты сайта, вызывающий сбой загрузки сайта (Sitecore) - PullRequest
0 голосов
/ 24 января 2019

Я пытаюсь добавить пользовательский обработчик на свой сайт, чтобы перенаправить на соответствующий файл 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 голосов
/ 24 января 2019

Не уверен, если это проблема, но из коробки 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>

Но я думаю, что лучшее решение - использовать настройки по умолчанию и серьезно относиться к безопасности.Сообщите поисковой системе, что такое URL карты сайта, используя файл robots.txt

User-agent: *   
Sitemap: /sitemap.ashx
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...