我如何使用 mod_rewrite 告诉客户端新文件名?

我如何使用 mod_rewrite 告诉客户端新文件名?

我正在尝试将类似的请求转换/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>

相关内容