Dispatcher 虚 URL

此文档将帮助您了解 AEM 如何处理虚 URL,以及其他一些使用重写规则映射比较接近交付边缘的内容的技术

🏠目录

🔙上一页 Dispatcher 刷新

什么是虚 URL

如果您的内容位于合理的文件夹结构中,它并不总是位于易于引用的 URL 中。  虚 URL 类似于快捷键。  引用真实内容所在位置的较短或唯一 URL。

示例:/aboutus 指向 /content/we-retail/us/en/about-us.html

AEM 作者可以选择在 AEM 中为某段内容设置虚 URL 属性并将其发布。

要使用此功能,您必须调整调度程序过滤器,以允许虚 URL 通过。但这会使以作者设置这些虚页面条目所需的速率调整调度程序配置文件变得不合理。

因此,调度程序模块具有自动允许内容树中列出的任何虚值的功能。

如何操作

创作虚 URL

作者在 AEM 中访问某个页面,然后访问页面属性,并在虚 URL 部分添加条目。

在保存更改并激活页面后,会将该虚值分配到此页面。

触控 UI:

站点编辑器屏幕上 AEM 创作 UI 的下拉对话框菜单

AEM 页面属性对话框页

传统内容查找器:

AEM 传统站点管理 UI 助手页面属性

传统 UI 页面属性对话框

注意:

请注意,该对话框很容易受名称空间问题的影响。

虚条目对于所有页面是全局的,这是其缺点之一,您必须针对我们稍后将加以解释的解决方法进行规划。

资源解析/映射

每个虚条目都是用于内部重定向的 sling 映射条目。

通过访问 AEM 实例 Felix 控制台 (/system/console/jcrresolver) 可以看到这些映射

以下是由虚条目创建的映射条目的屏幕截图:

资源解析规则中虚条目的控制台屏幕截图

在上例中,当我们要求 AEM 实例访问 /aboutus 时,它将解析为 /content/we-retail/us/en/about-us.html

调度程序自动允许过滤器

处于安全状态的调度程序会过滤掉路径 / 上通过该调度程序的请求,因为这是 JCR 树的根目录。

务必确保发布者仅允许来自 /content 和其他安全路径的内容,而不是来自 /system 等路径的内容。

下面是基本文件夹 / 中存在的问题和虚 URL,那么我们如何在保持安全的同时允许其访问发布者?

简单的调度程序具有自动过滤器允许机制,您必须安装 AEM 包,然后将调度程序配置为指向该包页面。

https://experience.adobe.com/#/downloads/content/software-distribution/en/aem.html?package=/content/software-distribution/en/details.html/content/dam/aem/public/adobe/packages/granite/vanityurls-components

调度程序的场文件中有一个配置部分:

/vanity_urls { 
    /url    "/libs/granite/dispatcher/content/vanityUrls.html" 
    /file   "/tmp/vanity_urls" 
    /delay  300 
}

此配置会告知调度程序每 300 秒从 AEM 实例中获取此 URL,以获取我们希望允许通过的项目列表。

它将响应的缓存存储在 /file 参数中,在此示例中为 /tmp/vanity_url

如果您通过 URI 访问 AEM 实例,将看到其获取的内容:

从 /libs/granite/dispatcher/content/vanityUrls.html 呈现的内容屏幕截图

实则就是一个非常简单的列表

将规则重写为虚规则

为什么要提到使用重写规则,而不使用如上所述的内置到 AEM 中的默认机制?

简单而言,这样可以更好地处理命名空间问题、性能和更高级别逻辑。

让我们再看一下虚条目 /aboutus 示例,它的内容 /content/we-retail/us/en/about-us.html 使用 Apache 的 mod_rewrite 模块完成重写。

RewriteRule ^/aboutus /content/we-retail/us/en/about-us.html [PT,L,NC]

此规则将查找虚 /aboutus,并从带有 PT 标志(通过)的呈示器中获取完整路径。

它还将停止处理所有其他规则 L 标记(最后),这意味着该规则不必遍历大型规则列表,如 JCR 解析必须执行的规则列表。 

同时不必代理请求并等待 AEM 发布者响应此方法的这两个元素,因此提高了其性能。

此处锦上添花的是 NC 标志(不区分大小写),这意味着如果客户用 /AboutUs 而不是 /aboutus 替换 URI,它仍然有效,并允许提取正确的页面。

要创建重写规则以执行此操作,您需要在调度程序上创建一个配置文件(示例:/etc/httpd/conf.d/rewrites/examplevanity_rewrite.rules),并将其包含在 .vhost 文件中,该文件处理需要应用这些虚 URL 的域。

以下是 /etc/httpd/conf.d/enabled_vhosts/we-retail.vhost 中包含的示例代码片段

<VirtualHost *:80> 
 ServerName weretail.com 
 ServerAlias www.weretail.com 
        ........ SNIP ........ 
 <IfModule mod_rewrite.c> 
  ReWriteEngine on 
  LogLevel warn rewrite:info 
  Include /etc/httpd/conf.d/rewrites/examplevanity_rewrite.rules 
 </IfModule> 
        ........ SNIP ........ 
</VirtualHost>

何种方法及何处

使用 AEM 控制虚条目具有以下优点

  • 作者可以动态创建它们
  • 虚条目与内容共存,并可与内容一起打包

使用 mod_rewrite 控制虚条目具有以下优点

  • 解析内容的速度更快
  • 更接近最终用户内容请求的边缘
  • 更多可扩展性和选项,用于控制如何在其他条件上映射内容
  • 可以不区分大小写

请同时使用这两种方法,但以下是有关何时使用哪种方法的建议和准则:

  • 如果虚值是临时的,并且规划的流量级别较低,则使用 AEM 内置功能
  • 如果虚值是不经常更改且频繁使用的固定端点,则使用 mod_rewrite 规则。
  • 如果虚命名空间(例如:/aboutus)必须对同一 AEM 实例上的多个品牌重用,则使用重写规则。
注意:

如果要使用 AEM 虚功能并避免命名空间,可以制定命名规范。使用嵌套如 /brand1/aboutus、brand2/aboutus、brand3/aboutus 的虚 URL。

下一页 ➡ 常见日志记录

Adobe 徽标

登录到您的帐户