2014-03-28 48 views
1

我基本上希望短網址得到解決,並使用CQ5網站的短網址生成HTML頁面。到目前爲止,短網址已按照預期映射到長網址,但生成的HTML網頁中的鏈接不會縮短。我對CQ5/AEM URL重寫場景缺少什麼?

例如,我期待下面<script>標籤的src屬性:

<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> 

但它是不是和保持不變。錨元素中的屬性也不會縮短。

在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會被重寫爲它們的縮寫形式。

任何想法我在這裏想念什麼?

回答

1

我們終於找到了問題並解決了這個問題。

有人曾/apps/myapp/config.publish下增加了一個com.day.cq.rewriter.linkchecker.impl.LinkCheckerImpl.xml具有以下內容:

<?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有殘疾的鏈接縮短組合。

刪除此文件使鏈接縮短工作再次。

3

默認情況下,CQ會重寫a,areaform標記中的鏈接。如果您想也改寫路徑在script標籤,打開OSGi的配置上發佈LinkCheckerTransformerFactory服務和下面的字符串添加到重寫元素選項:

script:src 

BTW:/content不是存儲的最佳去處clientlibs。通常我們把這東西放在/etc/designs/YOUR_APP

+0

Tomek,謝謝你的回覆。然而,正如我在我的問題中提到的,即使錨元素的href沒有被重寫。我會在明天看看我們的LinkCheckerTransformerFactory的配置,看看有沒有什麼不合適的。 – Behrang

+0

我再次檢查了我們的'CQ CQ Link Checker變壓器'配置,並且配置正確。我添加了'script:src'來重寫元素,但它仍然沒有踢入。 – Behrang

+0

Tomek,'LinkCheckerTransformerFactory'是否只重寫「破碎」的鏈接? [This](http://helpx.adobe.com/experience-manager/kb/DisableLinkChecker.html)以某種方式讓人這麼想。或者它是否也將長URL轉換爲短URL(例如/content/foo/home.html到/home.html)? – Behrang