Kentico 重定向基于 URL

Kentico redirect based off URL

firstname.lastname 需要访问我们的销售代表资料页面。所以 URL 的例子就是 www.mysite.com/mark.handy。这重定向到 Find-A-Rep-Detail.aspx?SalesRepWebID=mark.handy.

我们目前正在构建一个大型复杂的 URL 重写,它查看扩展并从那里开始。它有效,但意味着我们需要在 IIS 或跨多个服务器的 web.config 中管理它。

我正在寻找一种在 kentico 中执行此操作的方法。我知道社区网站的个人资料页面似乎会获取用户的 firstname.aspx 并重定向到个人资料页面。

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

这是关键。我们的用户数据不在 kentico 中。我们有一个 .asps 页面,它有一个用户控件,可以获取名称和 returns html.

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

这在 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,并且仍然使用该查询字符串参数如果您需要代码。

我做了一个快速测试,排序有效,但不是 100% 符合您的要求,因为您不能使用“.”。在通配符 URL.

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

所以通配符URL/john-smith会直接通过getFind-A-Rep-Detail.aspx模板显示出来,可以得到名字和姓氏。

通配符 URL 的一个重要事项是正确的模式,如果没有前缀并且模式只是 /{somehting},那么您的常规页面(如 /aboutus)就会遇到麻烦。

你好,我知道这可能更像是一种手动列出所有潜在 URL 的方法,但是你是否考虑过使用 Kentico 的这个 URL 重定向模块 - http://devnet.kentico.com/articles/url-redirection? 正如您可以在 Kentico

中列出所有 'from' 和 'to' 网址

作为 Kentico 通配符 URL 文档状态:

If you need to allow dots in user names and use wildcard URLs with user names at the same time, move the wildcard in the Page URL to the middle of the URL, for example: /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...)
  • 使用这种方法会涉及一些开销,因为每个请求都会检查模式