这里我想要做的是,我的雇主希望能够使用正则表达式重新定位301重定向与Sitecore中的别名,所以我试图实现它的方式是这样的!
单行文字字段 用一个复选框告诉sitecore它将是一个正则表达式我是.NET中的菜鸟和Sitecore如何实现这个?这里有一个例子http://postimg.org/image/lwr524hkn/
我需要帮助重定向的例子我想要处理是这样的,这是我想做的重定向的例子它可能是解决方案的产品。
exemple.com/en/solution/platform-features to
exemple.com/en/platform-features
我基于http://www.cmssource.co.uk/blog/2011/December/modifying-sitecore-alias-to-append-custom-query-strings-via-301-redirect的代码,这是用于查询字符串,我想使用正则表达式。
namespace helloworld.Website.SC.Common
{
public class AliasResolver : Sitecore.Pipelines.HttpRequest.AliasResolver
{
// Beginning of the Methods
public new void Process(HttpRequestArgs args)
{
Assert.ArgumentNotNull(args, "args");
if (!Settings.AliasesActive)
{
Tracer.Warning("Aliases in AliasResolver are not active.");
}
else
{
Sitecore.Data.Database database = Context.Database;
if (database == null)
{
Tracer.Warning("There is no context in the AliasResolver.");
}
else
{
{
Profiler.StartOperation("Resolve virgin alias pipeline.");
Item item = ItemManager.GetItem(FileUtil.MakePath("/sitecore/system/aliases", args.LocalPath, '/'), Language.Current, Sitecore.Data.Version.First, database, SecurityCheck.Disable);
if (item != null)
{
//Alias existis (now we have the alias item)
if (item.Fields["Regular Expressions"] != null)
{
if (!String.IsNullOrEmpty(item.Fields["Regular Expressions"].Value) && !args.Url.QueryString.Contains("aproc"))
{
var reg = new Regex(@"(?<Begin>([^/]*/){2})[^/]*/(?<End>.*)");
var match = reg.Match(@"exemple.com/en/solution/platform-features");
var result = match.Groups["Begin"].Value + match.Groups["End"].Value;
}
}
}
Profiler.EndOperation();
}
catch (Exception ex)
{
Log.Error("Had a problem in the VirginAliasResolver. Error: " + ex.Message, this);
}
}
}
}
///<summary>
/// Once a match is found and we have a Sitecore Item, we can send the 301 response.
///</summary>
private static void SendResponse(string redirectToUrl, HttpRequestArgs args)
{
args.Context.Response.Status = "301 Moved Permanently";
args.Context.Response.StatusCode = 301;
args.Context.Response.AddHeader("Location", redirectToUrl);
args.Context.Response.End();
}
}
}
PS:我知道他们有这方面的模块,但我的雇主希望这样做,我正在寻求帮助,因为我已经有一周时间试图添加此功能
答案 0 :(得分:-1)
因此,如果我理解正确,您不希望按路径选择别名:
Item item = ItemManager.GetItem(FileUtil.MakePath("/sitecore/system/aliases", args.LocalPath, '/'), Language.Current, Sitecore.Data.Version.First, database, SecurityCheck.Disable);
而是找到一个Alias,将Regex字段与Url进行比较。我没有测试过这个,但它可能有点像:
var originalUrl = HttpContext.Current.Request.Url;
var allAliases = Sitecore.Context.Database.SelectItems("/sitecore/system/aliases//*");
var foundAlias = allAliases.FirstOrDefault( alias =>
!string.IsNullOrEmpty(alias["Regular Expressions"]) &&
Regex.IsMatch(HttpContext.Current.Request.Url.ToString(), alias["Regular Expressions"]));
然后,如果foundAlias!= null,您可以像在私人SendResponse函数中一样检索网址和重定向。
var linkField = (LinkField)foundAlias.Fields["linked item"];
var targetUrl = linkField.Url;
using (new SecurityDisabler())
{
if (string.IsNullOrEmpty(targetUrl) && linkField.TargetItem != null)
targetUrl = LinkManager.GetItemUrl(linkField.TargetItem);
}
SendResponse(targetUrl, args);
同样,我没有对此进行过测试,所以如果需要进行一些修正,请不要开枪,但这应该可以帮助你顺利完成。