Apache:从标头中的重写规则中提取部分变量

Apache:从标头中的重写规则中提取部分变量

我有一个重写映射,将图片哈希与图片的真实路径(需要保密)关联起来。使用单个重写规则,我可以将哈希作为 URL 返回图片,这样就没问题了。

但是我想保密的是路径,而不是图片名称。即使名称不是秘密,我也不希望用户直接使用 server/image_name.jpg 访问,因此我认为在 content-disposition 标头中提供文件名是可以的。

我想到了这个:

RewriteMap redirector txt:C:/Apache24/url-mapping.txt
RewriteEngine On
RewriteRule ^/i/(.*)$ ${redirector:$1} [E=filename:${redirector:$1}]
Header set "Content-disposition" "attachment; filename=%{filename}e"

但映射的形状如下:

fa54e01623f625b1a6160fa0fee24112 /images/apath/to/picturename.png

并且当前配置采用的是整个路径,而不是最后部分。

我的问题是:

  1. 还有其他方法可以实现我想要做的事情吗?
  2. 使用 Content-disposition 解决方案,我如何以及在何处获取变量文件名的一部分以真正获得文件名?

谢谢!

答案1

我想出了以下解决方案(使用虚拟重写):

RewriteMap redirector txt:C:/Apache24/url-mapping.txt
RewriteEngine On
RewriteRule ^/i/(.*)$ ${redirector:$1} [E=path:${redirector:$1}]

RewriteCond %{ENV:path} .*images.*/(.*)
RewriteRule .* - [E=filename:%1]
Header set "Content-disposition" "attachment; filename=%{filename}e"

url-mapping.txt 中有以下规则:

fa54e01623f625b1a6160fa0fee24112 /images/myimage.png

相关内容