如何在htaccess中指定命名子文件夹?

时间:2010-08-11 14:18:22

标签: .htaccess

我有一个像这样的文件夹结构/ img / products / {product name} /然后是子文件夹hi,low和thumb。

我想使用htacess强制下载'hi'或'low'子文件夹中的所有文件(但不是'thumb')。

我希望这样的东西能起作用:

<FilesMatch "\(.*)(\/hi|\/low)(.*)">
ForceType applicaton/octet-stream
</FilesMatch>

现在我对正则表达式不是很好,但这似乎适用于正则表达式测试人员对抗

之类的路径

/img/products/active/low/something.jpg

然而,它不在网站上工作。

有什么建议吗?

由于

皮特

1 个答案:

答案 0 :(得分:2)

这可能应该是基于我认为你想要做的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文件,或者将指令与{{1}合并服务器或虚拟服务器配置中的语句。

在你的情况下,这是不可能的(好吧,无论如何,我想你可能有权访问必要的配置,但因为你的问题被标记为Directory我猜可能不是),给定将.htaccess文件复制到每个文件夹是不现实的。

解决方案:

事实证明,.htaccess,以及以文件名解析的方式执行各种voodoo,还为您提供了其他Apache功能的扩展,否则您无法使用。举个例子,我们可以使用mod_rewrite标志设置MIME类型,这是最简单的解决方案:

T

这实际上运行得很好,但是您的Apache安装认为它比您更了解并且在主配置中包含RewriteEngine On # Force the MIME-type, but don't actually perform a rewrite RewriteRule ^img/products/[^/]+/(hi|low)/[^/]+$ - [T=application/octet-stream] 文件并将mimes.types扩展名映射到{{}的可能性很大。 1}}。该值优先于jpg,在这种情况下无效。

另一种解决方案是创建一个充当中间人的小脚本,将适当的头和图像数据从服务器传递到客户端。然后,您可以使用image/jpeg将请求传递给该脚本:

RewriteRule

至于脚本本身,为了让这个答案变得荒谬可笑,我建议taking a look at this answer或其中一个other questions on this topic,请记住,必须屏蔽可以下载的文件名出于安全考虑。请注意,您可以从mod_rewrite获取原始请求路径,并可以使用它来查找正确的图像。