.htaccess重写规则,使用Content-Disposition标头将日期附加到文件名

bvjxkvbb  于 2022-11-16  发布在  其他
关注(0)|答案(1)|浏览(224)

我尝试下载不同的文件类型,如PDF,XLS,.jpg,.png等.直接从Joomla CMS通过网络浏览器.文档和文件,如Word,Excel,Powerpoint,PDF,.jpg,.png和文本都存储在Joomla DOCman,当用户想要一个文件,他们点击一个链接在DOCman菜单中的网站和文件被下载.我想得到的日期附加到文件名,当用户从创建的网站菜单中下载PDF、XLS、.jpg、.png等文件时,可能会出现这种情况。使用htaccess重写规则,在服务器级别可能会出现这种情况,因为浏览器用于保存文件的文件名包含在Content-Disposition头中:
https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Disposition
有没有可能重写该头附加到下载的文件名的日期?我尝试了下面的代码在htaccess文件的PDF文件类型,但它不像预期的工作.

RewriteEngine On
RewriteRule [^/]+\.pdf$ - [E=FILENAME:$0]
<FilesMatch "\.(?i:pdf)$">
    Header set Content-Type application/octet-stream
    Header set Content-Disposition "attachment; filename=%{FILENAME-.date('Y-m-d').}e" 
</FilesMatch>

任何帮助,以获得正确的htaccess重写规则,以完成上述,将不胜感激。

cedebl8k

cedebl8k1#

是的,这是可能的。这是测试和工程。

RewriteEngine On
RewriteRule ([^/]+)\.pdf$ - [E=FILENAME:$1]
<FilesMatch "\.(?i:pdf)$">
    Header set Content-Type application/octet-stream
    Header onsuccess set Content-Disposition "expr=attachment; filename=\"%{ENV:FILENAME}-%{TIME_YEAR}-%{TIME_MON}-%{TIME_DAY}\.pdf\"" env=FILENAME
</FilesMatch>

Header指令的Apache文档显示,应该使用%{VARNAME}e说明符将环境变量放置在Header值中。但是,由于在我的代码示例中,该值是通过 ap_expr 表达式提供的,因此应该使用ap_expr函数env(或者可能是 reqenv)。Header指令文档指出,在 ap_expr 表达式中:
函数调用使用%{funcname:arg}语法,而不是funcname(arg)。

相关问题