我正在尝试向我的网站添加自定义处理程序,以重定向到当前语言的相应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;
答案 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