url-rewriting - Sling 映射是否可以限制为带有主机 header 的请求

标签 url-rewriting aem sling

我想选择性地申请Sling mappings在 sling:Mapping nodes under/etc/map.publish 中定义,无法获得我想要的行为。

基本上,我希望映射规则仅在主机 header 匹配请求时触发。

我目前正在使用/etc/map.publish 下的 sling:Mapping 节点将资源路径映射到响应中的短 URL。

所以在 /etc/map.publish/http/myapp 下我会有以下节点:

<jcr:root ...>
    jcr:primaryType="sling:Mapping"
    sling:internalRedirect="/content/company/app/en"
    sling:match="app.company.com
</jcr:root>

我想要的是当用户请求时:

http://app.company.com/content/company/app/en/page.html

响应中的 url(映射时)将以以下形式返回:

http://app.company.com/page.html

入站和出站 URL 存在这种差异的原因是因为我有 Apache 为不同的设备类型重写 URL。

但是,当带有不同主机头的请求到达时,例如:

http://localhost:4502/content/company/app/en/page.html

我不希望根据该规则映射 URL。现在,它被映射到

http://app.company.com/page.html

似乎映射是严格解析使用主机/端口的资源。然后在输出期间映射 url 时,会找到并使用“最佳匹配”。如果可能的话,我希望 map() 的行为类似于 resolve()。

最佳答案

有两种基于/etc/map的机制:

  1. URL 解析器使用 resolver.resolve()负责转换 URL,如 http://app.company.com/page.html进入内容路径,例如。 /content/company/app/en/page.html
  2. 使用 resolver.map() 链接重写器转换内容并缩短所有链接的方法 /content/company/app/en/page.html表格 <a> , <img>等到完整的 URL。仅当您没有适当的正则表达式时它才会起作用 sling:match属性(property)。

您可以使用域名来映射/解析内容,例如。创建 multidomain environment , 所以 http://app.company.com/page.html将命中一个资源和http://app.company2.com/page.html会撞到另一个。

但是,您不能根据当前请求主机禁用或启用链接重写器。例如。如果如上所述配置映射,/content/company/app/en/page.html内容路径将始终缩短为 http://app.company.com/page.html ,无论您的请求中有什么主机 header 。

关于url-rewriting - Sling 映射是否可以限制为带有主机 header 的请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18845841/

相关文章:

php - URL 缩短器 PHP

java - Tuckey Urlrewriter 更改 JS 和 CSS 资源的 url 请求

java - CQ5 - 吊索接入节点

java - Apache Sling 中 resourceResolver.adaptTo(Session.class) 的用途是什么?

java - 将自定义节点类型添加到 Apache Sling WebApp

iis - 在 IIS 中需要 SSL 和使用 URL 重写之间的区别

.htaccess - 动态到静态 url 并删除动态

aem - 如何在远程 AEM 服务器上进行调试?

tags - HTML 注释标签 &lt;!-- --> 在 CQ5 中删除

java - Ajax : Not able to redirect to a content page inside AEM SLING servlet