这大概应该是基于我认为你正在试图做一个ServerFault问题,而是因为你确实不能做你想做什么(我认为你试图这样做),我会提供两种选择;一个可能无法工作,另一个涉及PHP脚本(对于你来说应该是没问题的,因为你的问题历史表明你之前会问一些关于PHP的问题)。
问题:
首先,我认为你正在试图做的,所以你可以纠正我,如果我错了:
# Apply ForceType to anything that's in a path that matches this
<FilesMatch "img/products/[^/]+/(hi|low)/[^/]+$">
ForceType applicaton/octet-stream
</FilesMatch>
然而,这是不行的,因为FilesMatch
只有examines the filename,假设您可以正确放置.htaccess
文件,或者将该指令与Directory
语句组合在服务器或虚拟服务器配置中。但是,这是不可能的(嗯,我假设无论如何,也许你有权访问必要的配置,但由于你的问题被标记为.htaccess
我猜可能不会),因为复制.htaccess
文件到每个文件夹是不现实的。
的解决方案:
事实证明,mod_rewrite
,在文件名分辨率的方式进行各种巫术一起,还为您提供了其他的Apache功能的扩展,你不一定会已经能够否则使用。典型的例子,我们可以使用T
标志,使得最简单的解决这个设置的MIME类型:
RewriteEngine On
# Force the MIME-type, but don't actually perform a rewrite
RewriteRule ^img/products/[^/]+/(hi|low)/[^/]+$ - [T=application/octet-stream]
这实际上工作得很好,但有很好的机会Apache安装认为,它比你懂得多,并在主配置中包含mimes.types
文件,该文件将jpg
扩展名映射到image/jpeg
。此值优先于RewriteRule
,因此在此情况下无效。
另一解决方案是创建一个小的脚本充当细末,经过适当的报头和图像数据从服务器到客户端。这样,你会使用mod_rewrite
传递到该脚本请求:
RewriteEngine On
# For an added bit of sanity, make the test pattern even more restrictive
RewriteRule ^img/products/[A-Za-z._-]+/(hi|low)/[A-Za-z._-]\.[A-Za-z]+$ imageDownloader.php
至于脚本本身,让这个答案从越来越冗长得可笑,我建议taking a look at this answer或other questions on this topic之一,记住它的为了安全起见,您必须屏蔽可以下载的文件名。请注意,您将能够从$_SERVER['REQUEST_URI']
获取原始请求路径,并可以使用该路径查找正确的图像。
你可以显示你正在使用的确切代码作为一个起点吗? – 2010-08-11 15:44:01
对不起,代码在那里,但没有标记为代码,所以没有正确显示。 – 2010-08-13 06:50:50