我有一个网站,根据网址中的“年”参数显示新闻档案。一个例子可能是这样的: 的 domain.com/news/newsarchive?year=2008
如何在Sitecore CMS中重写我的网址以删除“年”参数?我想将我的URL重写为以下内容: 的 domain.com/news/newsarchive/2008
Sitecore如何实现这一目标?
答案 0 :(得分:3)
这取决于你的解决方案。默认情况下,URL是指示解决了哪个项目。这意味着URL / news / newsarchive / 2008通常会使用该路径解析内容树中的项目。
因此您有几种选择。
使您的内容树类似于您想要的网址。所以移动你的新闻,以便2008年创建的所有新闻都在2008年的文件夹下。然后,2008文件夹将有一个演示文稿,特别显示该年份的存档。
覆盖解析上下文项的方式。这是在我记得的处理器ItemResolver中的httpBeginRequest管道中完成的。
使用Yan建议的通配符,并使用一些自定义代码从您的网址获取年份。
希望有所帮助
答案 1 :(得分:2)
在他的回复中加入Jens Mikkelsen第二点。
制作你自己的HttpRequestProcessor:
public class CustomResolver : HttpRequestProcessor
{
public override void Process(HttpRequestArgs args)
{
Assert.ArgumentNotNull(args, "args");
//make sure you are in the right context, and that the pipeline hasn't resolved an item yet
if ((Sitecore.Context.Item == null && Sitecore.Context.Database != null)
&& (Sitecore.Context.Database.Name != "core") )
{
var requestUrl = args.Context.Request.RawUrl; // e.g. domain.com/news/newsarchive/2008
//Do your magic here
Item item = ResolveItemOnUrl(requestUrl);
if (item != null)
{
Sitecore.Context.Item = item;
}
}
}
}
并在ItemResolver
之后将其添加到HttpRequestPipeline<pipelines>
<httpRequestBegin>
<processor patch:after="*[@type='Sitecore.Pipelines.HttpRequest.ItemResolver, Sitecore.Kernel']" type="yourNameSpace.CustomResolver, yourNameSpace" />
</httpRequestBegin>
</pipelines>
这与Sitecore在Sitecore电子商务服务(SES)中用于解析产品的方式大致相同。
答案 2 :(得分:0)
您可以使用the Wildcard approach。
答案 3 :(得分:0)
您现在可以使用Sitecore MVC Stephen Pope编写的以下开源模块完成此操作:
答案 4 :(得分:0)
添加潜在的解决方案:IIS级别的isapi_rewrite模块。
E.g。来自helicontech的模块可以处理相当复杂的重写 http://www.helicontech.com/isapi_rewrite/doc/examples.htm
如果重定向的原因是处理针对早期网站结构的网址,那么这将是正确的解决方案。这将使sitecore实现免于“遗留”引用。
答案 5 :(得分:0)
最好的方法就像Jens Mikkelsen所说 1)使contenttree的结构类似于首选的url结构。 如果这是不可能的 2)使用通配符项(名称为*的项目)作为newsarchive-item的子项目。此项处理无法在树中找到的newsarchive项下面的所有子项。在子布局的代码隐藏中,您可以读取所请求项目的路径并根据该处理代码。