我正在尝试将类似的请求转换/download.php?name=one
为/downloads/one.zip
。
以下发送了正确的文件,但客户端将其保存为 download.zip 而不是 one.zip
RewriteEngine On
RewriteCond %{REQUEST_URI} =/download.php
RewriteCond %{QUERY_STRING} ^name=(.+)$
RewriteRule ^/download.php$ /downloads/%1.zip
如何让 Apache v2.4.35 向客户端发送新文件名?
看起来旧版 PHP 会设置一个 http 标头:
content-disposition: attachment; filename="one.zip"
有什么方法可以告诉 Apache 始终发送来自 /downloads 或类似目录的文件的文件名?
答案1
可能不是唯一的方法,也不是最好的方法,但这是我最终得到的方法:
<Location /download.php>
RewriteEngine On
RewriteCond %{QUERY_STRING} ^name=(.+)$
RewriteRule /download.php$ /downloads/%1.zip [E=FILENAME:%1]
</Location>
<Location /downloads/>
Header set Content-Disposition "attachment; filename=%{REDIRECT_FILENAME}e.zip" env=REDIRECT_FILENAME
UnsetEnv REDIRECT_FILENAME
</Location>