基于URL的Kentico重定向

基于URL的Kentico重定向,kentico,Kentico,我们有需要通过firstname.lastname访问的销售代表个人资料页面。因此,一个示例URL是www.mysite.com/mark.handy。此重定向指向Find-A-Rep-Detail.aspx?SalesRepWebID=mark.handy 我们目前正在构建一个庞大而复杂的URL重写,它会查看扩展并从那里开始。它可以工作,但这意味着我们需要在IIS或web.config中跨多个服务器进行管理 我正在寻找一种在肯蒂科内部实现这一点的方法。我知道社区网站上的个人资料页面似乎采用了用

我们有需要通过firstname.lastname访问的销售代表个人资料页面。因此,一个示例URL是www.mysite.com/mark.handy。此重定向指向Find-A-Rep-Detail.aspx?SalesRepWebID=mark.handy

我们目前正在构建一个庞大而复杂的URL重写,它会查看扩展并从那里开始。它可以工作,但这意味着我们需要在IIS或web.config中跨多个服务器进行管理

我正在寻找一种在肯蒂科内部实现这一点的方法。我知道社区网站上的个人资料页面似乎采用了用户的firstname.aspx并重定向到个人资料页面

kentico解决方案必须检查URL,如果扩展与列表(aspx、html、js、css、asmx等)不匹配,则重定向

这是踢球的人。我们的用户数据不在kentico。我们有一个.asps页面,该页面有一个用户控件,该控件获取名称并返回html

我正在查看通配符URL文档:


这在Kentico中是可能的,还是我们应该坚持使用iis/web.config选项?

我认为您可以在Kentico中实现这一点。注意,我只是在这里提供一个概念证明,还没有测试或创建任何东西


向主页添加别名(假设这是网站的根目录),以便它接受带有用户名的无效url。比如说
/{UsersID}
。然后使用javascript Web部件,您可以检查
{?UsersID?}
url参数并将它们重定向到/Find-A-Rep页面。你甚至可以更进一步,在Find-A-Rep页面上,添加相同的别名
/Find-A-Rep/{UsersID}
,然后你可以使用一个更友好的url,比如
/Find-A-Rep/Mark.Handy
,如果你在代码中需要的话,仍然可以使用这个querystring参数。

我做了一个快速测试,它可以排序,但不是你想要的100%,因为您不能在通配符URL中使用“”

您可以创建模板Find-A-Rep-Detail.aspx,在模板中,使用{?firstname?}和{?lastname?}获取值。 然后在URL属性中,将路径或模式设置为/{firstname}-{lastname}。如果你使用。而不是-,将替换为-

因此,通配符URL/john smith将由get Find-A-Rep-Detail.aspx模板直接显示,您可以获得名字和姓氏


通配符URL的一个重要问题是正确的模式,如果没有前缀,并且该模式只是/{something},那么像/aboutus这样的常规页面将遇到麻烦。

您好,我知道这可能更像是一种手动方法来列出所有潜在的URL,但是您是否考虑过使用Kentico-的URL重定向模块?
正如Kentico通配符URL文档所述,您可以在Kentico中列出所有“从”和“到”URL:

如果您需要在用户名中允许点并使用通配符URL 用户名同时,将页面URL中的通配符移动到 URL中间,例如:/Members/{UserName}/Profile

如果这不是一个选项,并且“firstname.lastname”模式必须是URL的最后一部分,则可能的方法是使用
RequestEvents.Begin
global事件来检测“firstname.lastname”模式,并重定向到相应的页面

假设您使用的是Kentico 10:

[程序集:注册表模块(typeof(SalesRepRedirector))]
公共类SalesRepRedirector:模块
{
私有静态只读正则表达式SalesRepRegex=新正则表达式(@“^\/([a-zA-Z]+\.[a-zA-Z]+)$”;
public SalesRepRedirector():base(“SalesRepRedirector”){}
受保护的覆盖void OnInit()
{
RequestEvents.Begin.Execute+=开始执行;
}
私有静态void Begin_Execute(对象发送方,事件参数e)
{
var relativePath=RequestContext.CurrentRelativePath;
var regexMatch=SalesRepRegex.Match(relativePath);
if(regexMatch.Success)
URLHelper.Redirect(“~/Find-A-Rep-Detail.aspx?SalesRepWebID=“+regexMatch.Groups[1].Value”);
}
}
(将文件放在App_Code文件夹或单独的程序集中)

需要注意的一些事项:

  • 您需要调整正则表达式,以确保重定向不会影响对文件和页面的请求(.aspx、.css、.js…)
  • 当使用这种方法时,会有一些开销,因为每个请求都会检查模式