基于URL的Kentico重定向

时间:2017-01-19 16:35:43

标签: kentico

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

我们目前正在建立一个大型复杂网址Rewrite,它会查看扩展程序并从那里开始。它可以工作,但意味着我们需要在IIS或跨多个服务器的web.config中管理它。

我正在寻找一种在kentico中做到这一点的方法。我知道社区网站的个人资料页面似乎占用了用户的firstname.aspx并重定向到个人资料页面。

kentico解决方案必须检查URL以及扩展名是否与列表(aspx,html,js,css,asmx等)匹配,然后重定向。

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

我正在查看通配符网址文档:https://docs.kentico.com/k9/configuring-kentico/configuring-page-urls/wildcard-urls

这在Kentico中是否可行,或者我们应该坚持使用iis / web.config选项吗?

4 个答案:

答案 0 :(得分:1)

由于Kentico通配符URL文档状态:

  

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

如果这不是一个选项,那么" firstname.lastname"模式必须是URL的最后一部分,一种可能的方法是使用RequestEvents.Begin全局事件来检测" firstname.lastname"模式,并重定向到适当的页面。

假设您使用的是Kentico 10:

[assembly: RegisterModule(typeof(SalesRepRedirector))]
public class SalesRepRedirector : Module
{
    private static readonly Regex SalesRepRegex = new Regex(@"^\/([a-zA-Z]+\.[a-zA-Z]+)$");
    public SalesRepRedirector() : base("SalesRepRedirector") { }

    protected override void OnInit()
    {
        RequestEvents.Begin.Execute += Begin_Execute;
    }

    private static void Begin_Execute(object sender, EventArgs 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 ...)
  • 使用此方法时会涉及一些开销,因为将检查每个请求的模式

答案 1 :(得分:0)

我认为你可以在Kentico内完成这项任务。请注意,我只是在这里提供一个概念证明,还没有测试或创建任何东西。

在主页中添加别名(假设这是网站的根目录),因此它接受带有用户名的无效网址。像/{UsersID}这样的东西。然后使用javascript webpart,您可以检查{?UsersID?} url参数并将它们重定向到/ Find-A-Rep页面。您甚至可以更进一步,在Find-A-Rep页面上添加相同的别名/Find-A-Rep/{UsersID},然后您可以使用更友好的URL /Find-A-Rep/Mark.Handy,如果需要,仍然可以使用该查询字符串参数代码。

答案 2 :(得分:0)

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

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

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

对于通配符URL,一个重要的是正确的模式,如果没有前缀且模式只是/ {somehting},那么像/ aboutus这样的常规页面就会遇到麻烦。

答案 3 :(得分:0)

您好我知道这可能是列出所有潜在网址的手动方法,但是您是否考虑过使用Kentico的这个网址重定向模块 - http://devnet.kentico.com/articles/url-redirection? 您可以在Kentico中列出所有“从”和“到”的网址