您将如何在CQ5/AEM的链接中保留选择器

Bay*_*ier 7 sling aem

我试图在点击cq5页面时保持链接中存在特定的选择器.

例如,假设您已访问/content/mysite/mypage.stickyselector.html,我希望页面上的所有后续链接(例如aboutus.html和contact.html页面)保留aboutus.stickyselector.html和contact.stickyselector.html链接.

我尝试这样做有几个原因,包括防止移动设备点击时出现过多的重写,例如mypage.smart.html,因为我们可以让重写规则允许用户在不重新检测设备类型的情况下进行重写,如以及任何定制内容等

我已经尝试创建自己的链接重写变换器,这对于重写您掌握了所有信息的链接非常棒,但是,我似乎无法获得用于访问包含链接的页面的选择器这点.

任何帮助将不胜感激.

Dav*_*ine 5

如果您有权访问吊索请求,则可以获取所有选择器字符串:

String selectors = slingRequest.getRequestPathInfo().getSelectorString();
Run Code Online (Sandbox Code Playgroud)


dif*_*ffa 5

有几种方法:

  1. 重写CQ中出站响应的URL(由David建议)
  2. 使用调度程序中的mod_rewrite重写入站请求中的URL(假设Apache)

正如David所描述的那样,我将描述第二种情况

"sticky"选择器值可以在cookie中返回给客户端

Set-Cookie: selector=stickyselector;
Run Code Online (Sandbox Code Playgroud)

来自客户端的每个后续站点请求都将包含该cookie.然后,您可以使用该cookie在apache中重写URL,然后再将其呈现给调度程序模块(最终发布实例:

RewriteCond %{HTTP:Cookie} selector=([^;]+) [NC]    # If we have the selector cookie
RewriteRule ^(.*)\.html$ /$1.%1.html [PT]           # add it to the request url before extension
Run Code Online (Sandbox Code Playgroud)

所以到达调度员的请求看起来像这样:

GET /content/mysite/mypage.html HTTP/1.1
Cookie: selector=stickyselector;
Run Code Online (Sandbox Code Playgroud)

将到达的发布实例重写为:

/content/mysite/mypage.stickyselector.html
Run Code Online (Sandbox Code Playgroud)

如果您使用此方法进行设备/通道特定的再现,那么您也可以使用用户代理值而不是cookie来驱动选择器添加.例如:

RewriteCond %{HTTP_USER_AGENT} "iphone|ipod|iemobile" [NC]
RewriteRule ^(.*)\.html$ /$1.mobile.html [PT]              # add channel selector to the request url 
Run Code Online (Sandbox Code Playgroud)

这种方法的好处是所有用户都被呈现相同的URL(例如/ content/mysite/mypage.html),URL中的选择器仅被呈现给CQ.

否定的是它通常需要cookie,它取决于apache配置.