目前我正在尝试从sitecore网址中删除.aspx扩展名。博客建议更改以下内容可以解决此问题:
<add name="sitecore" type="Sitecore.Links.LinkProvider, Sitecore.Kernel" addAspxExtension="true"
问题是,这不适用于我们网站中的所有代码,因为某些自定义控件强制使用.aspx。
我的想法是,如果我可以在将响应发送回用户之前进入管道,我可以将URL更改为更友好的SEO(没有.aspx),我正在尝试使用以下代码
public class CustomExecuteRequest : Sitecore.Pipelines.HttpRequest.ExecuteRequest
{
protected override void PerformRedirect(string url)
{
base.PerformRedirect(url.Replace(".aspx" , ""));
}
public override void Process(Sitecore.Pipelines.HttpRequest.HttpRequestArgs args)
{
PerformRedirect(args.Url.FilePathWithQueryString.Replace(".aspx", ""));
//args.Url.FilePathWithQueryString = args.Url.FilePathWithQueryString.Replace(".aspx", "");
//base.Process(args);
}
}
代码正在被攻击并且此解决方案正常工作,但是它正在执行重定向,这实际上不是我想要做的事情,我宁愿只是定期请求并清除URL。问题是args变量有一个只读字段(下面已注释掉),用于实际创建URL。
有没有人对我如何更改网址或管道中的其他地方有任何想法?
答案 0 :(得分:2)
您在HttpRequestPipeline中所做的事情当然不是更改链接的正确方法。与任何Web应用程序一样,页面上的任何链接都将作为HTTP请求的内容返回给客户端。在请求期间重定向不会更改呈现的内容。
这样做的唯一方法是艰难的方式:
像这样的东西总会产生一个.aspx结尾例如:
var urlOptions = UrlOptions.DefaultOptions;
urlOptions.AddAspxExtension = true;
LinkManager.GetItemUrl(item, urlOptions);
答案 1 :(得分:0)
要么改变所有链接以使用链接管理器的困难方法,要么是时间紧张,然后建议可能在sitecore之外的东西并使用IIS urlrewrite模块。