gpt4 book ai didi

php - 如何在 Apache 中同时重写和设置 header

转载 作者:可可西里 更新时间:2023-11-01 00:53:24 25 4
gpt4 key购买 nike

我有一个图像目录,可以直接在浏览器中查看,也可以下载。

所以,假设我有一个文件/gallery/gal_4254.jpg。

我想让/download/gal_4254.jpg 触发图像的下载而不是查看它。/download 为空,所有图片都在/gallery 中。

我可以成功地将对下载目录的请求映射到其他文件

<Directory /var/www/download>
RewriteEngine on
RewriteRule (.*)$ /gallery/$1
</Directory>

而且我已经可以通过设置在图库目录中强制下载

<Directory /var/www/gallery/>
ForceType "image/jpg"
Header set Content-Disposition "attachment"
</Directory>

所以设置headers是没有问题的。我实际上并不希望/gallery 具有 header ,只是通过重写的/download/请求/gallery/*。

但是,我需要将两者结合起来,所以请求被映射到另一个目录中的文件,并且文件被赋予附件 header 。

#does not work - just views the image like when it is viewed directly
<Directory /var/www/download>
ForceType "image/jpg"
Header set Content-Disposition "attachment"
RewriteEngine on
RewriteRule (.*)$ /gallery/$1
</Directory>

我试过更改重写部分和标题部分的顺序,但无济于事。我认为当请求被重写到另一个目录时它会丢失 header 。

关于如何在 Apache 中执行此操作的任何建议?

我意识到这也可以用 PHP 完成,这就是为什么我将它发布在这里与 Server Fault 的原因。也欢迎使用 PHP 的解决方案。

最佳答案

我刚刚做了这个,在绊倒了你的例子之后;-)我很确定您只需将最新示例中的“Directory/var/www/download”部分更改为“Location/download”就可以了。

基本原理是:“目录”适用于重写后生成的物理目录,而“位置”适用于原始 URI,无论是否发生任何重写以查找物理文件。

由于 mod_rewrite 是一个适用于不同时期的巨大 hack,您的代码的效果不是很明显。

我的工作环境设置是:

<Location /contents/>
Header set Content-Disposition "attachment"
</Location>
...
RewriteRule ^.*(/e-docs/.*)$ $1

所以像/contents/myimage.jpg 和/contents/e-docs/myimage.jpg 这样的 URL 都会得到 Content-Disposition 头,即使/contents/e-docs/myimage.jpg 实际上是/e-docs/myimage.jpg 文件,如重写所述。

为此避免使用 PHP 有一个额外的好处,即您可以使用轻量级静态 Apache 服务器而不是耗费大量内存的 PHP 后端进程来提供这些图像和潜在的巨大视频文件(如我的情况)。

关于php - 如何在 Apache 中同时重写和设置 header ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2364848/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com