Url rewriting 可以将Sling映射限制为具有主机头的请求吗
我想有选择地应用/etc/map.publish下sling:Mapping节点中定义的,但无法获得我想要的行为 本质上,我希望映射规则仅在主机头与请求匹配时触发 我目前正在使用/etc/map.publish下的sling:Mapping节点将资源路径映射到响应中的短URL 因此,在Url rewriting 可以将Sling映射限制为具有主机头的请求吗,url-rewriting,aem,sling,Url Rewriting,Aem,Sling,我想有选择地应用/etc/map.publish下sling:Mapping节点中定义的,但无法获得我想要的行为 本质上,我希望映射规则仅在主机头与请求匹配时触发 我目前正在使用/etc/map.publish下的sling:Mapping节点将资源路径映射到响应中的短URL 因此,在/etc/map.publish/http/myapp下,我将有以下节点: <jcr:root ...> jcr:primaryType="sling:Mapping" sling:in
/etc/map.publish/http/myapp
下,我将有以下节点:
<jcr:root ...>
jcr:primaryType="sling:Mapping"
sling:internalRedirect="/content/company/app/en"
sling:match="app.company.com
</jcr:root>
响应中的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
,有两种机制:
resolver.resolve()
负责像http://app.company.com/page.html
进入内容路径,例如/content/company/app/en/page.html
resolver.map()
方法转换内容并缩短中/content/company/app/en/page.html
表单中的所有链接,因此http://app.company.com/page.html
将命中一个资源并http://app.company2.com/page.html
将击中另一个
但是,您不能根据当前请求主机禁用或启用链接重写器。例如,如果如上配置映射,则/content/company/app/en/page.html
内容路径将始终缩短为http://app.company.com/page.html
,无论您的请求中有什么主机头。如果您想确保入站请求得到解决,只需向其添加第二个映射即可
您的映射如下所示:
<jcr:root ...>
jcr:primaryType="sling:Mapping"
sling:internalRedirect="[/content/company/app/en,/content,/]"
sling:match="app.company.com
</jcr:root>
jcr:primaryType=“sling:Mapping”
sling:internalRedirect=“[/content/company/app/en,/content,/]”
sling:match=“app.company.com
出站映射,s.a.resolver.map(),将使用第一个应用规则。可以定义许多映射。您知道链接重写器是否只使用它找到的第一个映射和匹配路径吗?我不确定在这种情况下将采用哪一个映射。但是,我认为每个内容分支都应该有一组单独的映射,它们不应该重叠,因此我们没有“为了担心秩序,”托梅克和迪法,你能看看我的房间吗
<jcr:root ...>
jcr:primaryType="sling:Mapping"
sling:internalRedirect="[/content/company/app/en,/content,/]"
sling:match="app.company.com
</jcr:root>