.htaccess拒绝从脚本下载文件


.htaccess denies files to download from script

大家好,

我的站点根目录中有一个名为documents的文件夹,该文件夹由.htpasswd文件进行密码保护,但允许脚本访问该文件夹进行查看。

如何允许脚本在不直接从目录访问文件的情况下下载该文件?

我将举一个例子来解释这种情况。

在我的主页上,我显示了图片test.jpg,这张图片在受保护的documents文件夹中。图像会正确显示在主页上。

如果在地址栏www.domain.com/documents/test.jpg中键入,它不会显示或下载,而是要求输入密码。(这是我想要的,但不希望人们为他们想要下载的每个文件键入密码)

有没有一种方法可以让php或JavaScript下载文档,而无需提示输入密码?其他单词绕过.htaccess规则?

乙醇提前

我已经重新标记了添加PHP和Javascript。没有什么可以阻止您编写重新映射PHP脚本,该脚本位于documents文件夹之外,因此无需Apache身份验证即可访问。这可能会发出一个readfile()来发送文件(请参阅文档示例和用户贡献以获得更详细的解释。由于这是一个服务器端脚本,它将可以直接访问受保护的目录。

当然,您可能想要实现某种形式的访问控制,比如附加一个请求参数check,该参数基于文件名的md5和共享机密。这将很容易在调用脚本中进行计算。然而,一旦您将这种访问协商转移到客户端脚本,您就需要接受这可能会被任何有经验的黑客进行逆向工程和利用。

作为一个脚注,如果你想允许用户下载你的图像,为什么要把它们放在一个受访问控制的目录中。为什么不把它们移出这个目录呢?

正如Barry所说,.htaccess是在处理任何PHP之前处理的,因此绕过它不是一种选择。您将不得不更改.htaccess配置或编写一个重新映射的PHP脚本。

我建议更改.htaccess配置,允许直接下载链接,但拒绝目录列表。这将允许人们在不提示输入密码的情况下下载http://www.example.com/documents/some-file-name.ext等直接链接,但他们必须提前知道链接——他们将无法查看/documents/文件夹以查看其中的所有内容。

您可以通过注释掉或删除Auth指令来做到这一点:

#AuthUserFile /path/to/.htpassword
#AuthName "Name"
#AuthType Basic
#Require Valid-User

并添加指令阻止目录列表:

Options -Indexes