我有一个重写映射,将图片哈希与图片的真实路径(需要保密)关联起来。使用单个重写规则,我可以将哈希作为 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
并且当前配置采用的是整个路径,而不是最后部分。
我的问题是:
- 还有其他方法可以实现我想要做的事情吗?
- 使用 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