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

Dav*_*hes 2 sling aem

我有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>
Run Code Online (Sandbox Code Playgroud)

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

<head>
  <link rel="canonical" href="http://www.sitename.com/home.html" />
  <meta name="canonical" content="/content/www-sitename/home.html" />
</head>
Run Code Online (Sandbox Code Playgroud)

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

Tom*_*wek 5

书呆子答案是正确的,默认情况下,负责解析HTML(HTMLParser的)内部吊带机制仅支持以下标签:a,area,form,base,link,script,body,所以即使你添加meta:content到配置和linkchecker,CQ将无法识别<meta>的标签,该标签需要处理.

为了重新配置htmlparser,创建一个名为节点generator-htmlparser/libs/cq/config/rewriter/default具有以下特性:

  • jcr:primaryType = nt:unstructured
  • includeTags = [ A,AREA,FORM,BASE,LINK,SCRIPT,BODY,META]

includeTags属性应该是多值的,因此您可以在将来添加其他标记.

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

  1. 复制/libs/cq/config/rewriter/default及其子女/apps/YOURAPP/config/rewriter/my-rewriter.
  2. ordermy-rewriterto 上设置属性1.
  3. generator-htmlparsermy-rewriter上面创建.