Dispatcher虚URL | AEM
本文档将帮助您了解Adobe Experience Manager如何处理虚URL和其他技术,例如使用重写规则使内容更接近交付的边缘。
描述 description
环境
Adobe Experience Manager
问题/症状
AEM如何处理虚URL? 是否有其他技术可以将内容映射到更接近交付边缘的位置?
什么是虚URL?
如果您的内容位于合理的文件夹结构中,它并不总是位于易于引用的URL中。 虚URL类似于快捷方式。 引用实际内容所在位置的较短或唯一URL。
示例: /aboutus指向 /content/we-retail/us/en/about-us.html
AEM作者可以选择在AEM中为某段内容设置虚URL属性并将其发布。
要使用此功能,您必须调整调度程序过滤器,以允许虚URL通过。 但这会使以作者设置这些虚页面条目所需的速率调整调度程序配置文件变得不合理。
因此,调度程序模块具有自动允许内容树中列出的任何虚值的功能。
解决方法 resolution
它是如何工作的?
创作虚URL
作者在AEM中访问页面,然后访问页面属性,并在虚URL部分添加条目。
保存更改并激活页面后,会将该虚值分配到此页面。
触控UI:
传统内容查找器:
注意: 请注意,这很容易受命名空间问题的影响。 虚条目对于所有页面都是全局的,这只是您必须为其计划解决方法的缺点之一。 我们稍后会解释其中的几个。
资源解析/映射:
每个虚条目都是用于内部重定向的sling映射条目。 这些映射在AEM实例Felix控制台(/system/console/jcrresolver
)中可见
以下是由虚条目创建的映射条目的屏幕截图:
在上例中,当我们要求AEM实例访问/aboutus
时,它将解析为/content/we-retail/us/en/about-us.html
Dispatcher自动允许筛选器:
处于安全状态的Dispatcher会过滤掉路径/上通过Dispatcher的请求,因为这是JCR树的根目录。
确保发布者仅允许来自/content
和其他安全路径等的内容,而不允许/system
等路径的内容,这一点很重要。
下面是基本文件夹/中存在的问题和虚URL,那么我们如何在保持安全的同时允许它们访问发布者?
简单的调度程序具有自动过滤器允许机制,您必须安装AEM包,然后将Dispatcher配置为指向该包页面。 访问此处以获取AEM包。
Dispatcher的场文件中有一个配置部分:
/vanity_urls { /url "/libs/granite/dispatcher/content/vanityUrls.html"
/file "/tmp/vanity_urls" /delay 300 }
此配置会告知Dispatcher每300秒从其AEM实例中获取此URL,以获取我们希望允许通过的项目列表。
它将响应的缓存存储在/file参数中,在此示例中为/tmp/vanity_urls
因此,如果您通过URI访问AEM实例,将看到其获取的内容:
这是一个非常简单的列表。
将规则重写为虚规则
为什么要提到使用重写规则,而不使用如上所述的内置到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
刷新URL,它仍然有效,并允许获取正确的页面。
要创建重写规则以执行此操作,您需要在Dispatcher上创建一个配置文件(示例: /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
哪种方法及在何处使用它?
A.使用AEM控制虚条目具有以下优点:
- 作者可以动态创建它们
- 它们与内容共存,并可与内容一起打包
B.使用mod_rewrite
控制虚条目具有以下优点:
- 解析内容的速度更快
- 更接近最终用户内容请求的边缘
- 更多可扩展性和选项,用于控制如何在其他条件上映射内容
- 可以不区分大小写
C.同时使用这两种方法,但以下是有关在下列情况下使用哪种方法的建议和标准:
- 如果虚值是临时的,并且规划的流量级别较低,则使用AEM内置功能
- 如果虚值是不经常更改且频繁使用的固定端点,则使用
mod_rewrite
规则。 - 如果虚命名空间(例如:
/aboutus
)必须对同一AEM实例上的多个品牌重用,则使用重写规则。
注意: 如果要使用AEM虚功能并避免命名空间,可以制定命名约定。 使用嵌套如/brand1/aboutus, brand2/aboutus, brand3/aboutus
的虚URL