我想选择性地申请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
的机制:
- URL 解析器使用
resolver.resolve()
负责转换 URL,如http://app.company.com/page.html
进入内容路径,例如。/content/company/app/en/page.html
- 使用
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/