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