2014-10-01 50 views
2

我有吊索映射設置,將外出路徑重寫到外部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:內容不變:

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

值得注意的是,在配置linkcheckertransformer.rewriteElements以包含它之前,鏈接:href未被重寫。爲什麼這個變化適用於鏈接:href,而不是meta:content。除了創建自定義重寫過濾器之外,還可以做些什麼來獲取meta中的鏈接:content屬性是否需要重寫?

回答

5

書呆子答案是正確的,默認情況下僅支持以下標籤內部吊帶機制,負責解析HTML(HTMLParser的):aareaformbaselinkscript,body,所以即使您將meta:content添加到LinkChecker配置中,CQ也不會將<meta>識別爲需要處理的標籤。

爲了重新配置htmlparser,創建名爲/libs/cq/config/rewriter/defaultgenerator-htmlparser具有以下屬性的節點:

  • JCR:primaryType = NT:非結構化
  • includeTags = [AAREAFORMBASELINKSCRIPTBODYMETA]

includeTags屬性應該是多值的,所以您可以在將來添加其他標籤。

如果你不希望覆蓋/libs下的內容,創建自己的重寫配置:

  1. 複製/libs/cq/config/rewriter/default及其子女/apps/YOURAPP/config/rewriter/my-rewriter
  2. 設置order屬性my-rewriter1
  3. 根據上述my-rewriter創建generator-htmlparser
+0

謝謝你們兩位!有沒有辦法做到這一點,而不修改_libs_?我試着按照_apps_下的位置創建_/apps/cq/config/rewriter/default/generator-htmlparser_,但這不起作用。 – 2014-10-02 23:09:20

+0

我已經更新了我的答案。 – 2014-10-03 07:21:14

+0

再次感謝@Tomek。我有一個關於重寫包含'jcr:content'的URL的後續問題。請參閱:http://stackoverflow.com/questions/26220078/sling-mapping-rewrite-rules-do-not-rewrite-jcrcontent-paths – 2014-10-06 15:57:14