缓存在调度程序中的文件路径,并在请求文件路径的子集时呈现 403

File path cached in dispatcher and rendering a 403 when a sub-set of the file path is requested

我们在调度程序中规定不缓存 .pdf,但允许 .png。其中一个 .pdf 文件具有 .png 缩略图再现,使 jcr 树结构中的路径 /content/a/b/c.pdf/r/s/t.png 可缓​​存。

当用户尝试访问 /a/b/c.pdf apache returns 一个 403 - forbidden 状态代码。该路径在 AEM 应用程序服务器

中有效

我仍然想保持图像缓存并解决 403。

有suggestions/ideas吗?

所以接下来的问题是:当图像被缓存时,调度程序会创建它的路径。其中一个文件夹的名称为 c.pdf。然后,当用户请求 /content/a/b/c.pdf 时,调度员会看到有一个具有该名称的文件夹,并尝试用它进行响应。而且,它当然不是有效的 pdf 文件,甚至根本不是有效文件。您可以在 request.log 中轻松查看 - 在那里您不会看到对此 pdf 的请求,因为调度员发送了对此请求的响应。

我只想到一个解决方案(尽管它很脏):您可以为对 pdf 文件的请求设置重写规则,将 /jcr:content/renditions/original 尾部添加到路径(实际存储 pdf 内容的位置) .

它看起来像:

RewriteCond %{REQUEST_URI} "^/content/dam" [NC]
RewriteCond %{REQUEST_URI} !"jcr_content/renditions" [NC]
RewriteCond %{REQUEST_URI} !"jcr:content/renditions" [NC]
RewriteRule ^/content/dam/(.*\.pdf)$ /content/dam//_jcr_content/renditions/original [L,NE,NC]  

另外,不确定,但是最后一行需要标志 R

我认为最好的解决方案是以这种方式请求资产:

a/b/c.pdf.thumb.48.48.png

而不是:

a/b/c.pdf/jcr:content/renditions/cq5dam.thumbnail.48.48.png

这允许调度程序缓存,并消除元数据和资产之间的冲突。