吊索映射重写规则不会重写元标记中的路径

时间:2014-10-01 18:26:31

标签: cq5 aem sling

我有sling mappings设置,重写外部URL的传出路径。这个重写的一个例子: /content/www-sitename/home.html将被重写为http://www.sitename.com/home.html

我还配置了LinkCheckerTransformerFactory:linkcheckertransformer.rewriteElements=["a:href","area:href","form:action","link:href","meta:content"]

页面组件上的一些HTML:

<head>
  <link rel="canonical" href="/content/www-sitename/home.html" />
  <meta name="canonical" content="/content/www-sitename/home.html" />
</head>

访问时,只有链接:href已被重写,meta:content不变:

<head>
  <link rel="canonical" href="http://www.sitename.com/home.html" />
  <meta name="canonical" content="/content/www-sitename/home.html" />
</head>

值得注意的是,在配置linkcheckertransformer.rewriteElements以包含它之前,未重写链接:href。为什么此更改适用于link:href,而不适用于meta:content。除了创建自定义重写过滤器之外,还可以采取哪些措施来获取要重写的meta:content属性中的链接?

2 个答案:

答案 0 :(得分:5)

nerd 答案是正确的,默认情况下,负责解析HTML的内部Sling机制(htmlparser)仅支持以下标记:aareaformbaselinkscriptbody,即使您将meta:content添加到LinkChecker配置,CQ也不会识别{{ 1}}作为需要处理的标签。

要重新配置<meta>,请在htmlparser下创建一个名为generator-htmlparser的节点,其中包含以下属性:

  • jcr:primaryType = nt:unstructured
  • includeTags = [/libs/cq/config/rewriter/defaultAAREAFORMBASELINKSCRIPT,{{ 1}}]

BODY属性应该是多值的,因此您可以在以后添加其他标记。

如果您不想覆盖META下的内容,请创建自己的重写配置:

  1. includeTags及其子项复制到/libs
  2. /libs/cq/config/rewriter/default上的/apps/YOURAPP/config/rewriter/my-rewriter属性设置为order
  3. 在上面的my-rewriter下创建1

答案 1 :(得分:1)

我认为你必须将元标记添加到htmplparser生成器。

查看我的问题和答案:How to add additional element to htmlparser generator