我对CQ5 / AEM URL重写方案缺少什么?

时间:2014-03-28 08:18:13

标签: cq5 sling aem

我基本上希望使用短网址来解析,并使用CQ5网站的短网址生成HTML网页。到目前为止,短URL已按预期映射到长URL,但生成的HTML页面中的链接不会缩短。

例如,我期待以下src标记的<script>属性:

<script type="text/javascript" src="/content/foo/c0/06/9d/3d93a858-efb4-4619-8f9e-5edc65d0f5ae/style/clientlibs.1395978029951.js"></script>

缩写为:

<script type="text/javascript" src="/style/clientlibs.1395978029951.js"></script>

但事实并非如此。锚元素中的href属性也不会缩短。

在JCR中,网站存储在/content/foo/c0/06/9d/3d93a858-efb4-4619-8f9e-5edc65d0f5ae/下,我已经配置了我的/etc/hosts和Apache配置文件,以便在我的本地开发环境中通过http://site-1:4503访问它。

我已经定义了以下URL映射:

{
   "jcr:primaryType":"sling:Folder",
   "http":{
      "jcr:primaryType":"sling:Folder",
      "site-1.4503":{
         "sling:internalRedirect":[
            "/content/foo/c0/06/9d/3d93a858-efb4-4619-8f9e-5edc65d0f5ae"
         ],
         "jcr:primaryType":"sling:Mapping",
         "redirect":{
            "sling:internalRedirect":[
               "/content/foo/c0/06/9d/3d93a858-efb4-4619-8f9e-5edc65d0f5ae/$1",
               "/$1"
            ],
            "jcr:primaryType":"sling:Mapping",
            "sling:match":"(.+)$"
         }
      },
      "site_1.4503":{
         "sling:internalRedirect":[
            "/content/foo/c0/06/9d/3d93a858-efb4-4619-8f9e-5edc65d0f5ae/home.html"
         ],
         "jcr:primaryType":"sling:Mapping",
         "sling:match":"site-1.4503/$"
      }
   }
}

当我在JCR解析器(http://localhost:4503/system/console/jcrresolver)中测试此映射时,它正在按预期工作。例如,

/content/foo/c0/06/9d/3d93a858-efb4-4619-8f9e-5edc65d0f5ae/style/clientlibs.1395978029951.js

映射到

http://site-1:4503/style/clientlibs.1395978029951.js

http://site-1:4503/style/clientlibs.1395978029951.js

解决了:

JcrNodeResource, 
type=cq:ClientLibraryFolder,
superType=null, 
path=/content/foo/c0/06/9d/3d93a858-efb4-4619-8f9e-5edc65d0f5ae/style/clientlibs

当我在浏览器中转到http://site-1:4503/style/clientlibs.1395978029951.js时,JS文件将按预期呈现。

但是,当我查看主页的HTML源代码时,正如我前面提到的,没有一个长URL被重写为缩短的表单。

任何想法我在这里缺少什么?

2 个答案:

答案 0 :(得分:3)

默认情况下,CQ会重写aareaform标记中的链接。如果您还要重写script标记中的路径,请在发布时打开LinkCheckerTransformerFactory服务的OSGi配置,并将以下字符串添加到重写元素选项:

script:src

BTW:/content不是存储clientlib的最佳位置。通常我们会将这些内容放在/etc/designs/YOUR_APP

答案 1 :(得分:1)

我们终于找到了问题并解决了这个问题。

有人在com.day.cq.rewriter.linkchecker.impl.LinkCheckerImpl.xml下添加了/apps/myapp/config.publish,内容如下:

<?xml version="1.0" encoding="UTF-8"?>
<jcr:root xmlns:sling="http://sling.apache.org/jcr/sling/1.0" xmlns:jcr="http://www.jcp.org/jcr/1.0"
    jcr:primaryType="sling:OsgiConfig"
    service.bad_link_tolerance_interval="{Long}48"
    service.check_override_patterns="[^.]"
    service.special_link_patterns=".*&#xa;"
    service.special_link_prefix="[javascript:,data:,mailto:,#,&lt;!--,${]"/>

我认为check_override_patternsspecial_link_patterns的组合已禁用链接缩短。

删除此文件会使链接缩短工作。