【问题标题】:Private folder in PHP?PHP中的私人文件夹?
【发布时间】:2013-04-06 11:11:41
【问题描述】:

我的网站处理图像。每当用户上传图像时,它都会存储在“imagefiles”文件夹中,但问题是用户可以通过 http 在 Web 上看到该文件夹​​的所有图像。为了防止发生这种情况,我对要禁止的文件夹的 .htaccess 进行了更改,但这样做我无法读取图像以自己在网页上显示。

那么我怎样才能使这个文件夹只有我可以用来阅读它,当用户尝试通过 http 访问它时它应该说禁止?

【问题讨论】:

    标签: php .htaccess directory private


    【解决方案1】:

    您可以禁用该文件夹的索引,方法是创建一个虚拟的 index.html 页面,或禁用 .htaccess 中的默认索引:

    <Directory /path/to/image/folder>
        Options -Indexes
    </Directory>
    

    这将阻止人们浏览所有图像的目录列表,但不会阻止他们直接访问图像。

    如果您想要更精细的控制,您应该将对该文件夹的所有请求重写为 PHP 脚本,该脚本将检查 $_REQUEST['REQUEST_URI'] 以确定他们试图加载的图像,然后如果允许他们通过任何逻辑查看它选择,您根据图像类型发送适当的标题,然后readfile('/path/to/image');

    【讨论】:

    • 我添加了带有重定向到主 index.html 的虚拟 index.php 文件,但是当我尝试通过 http 访问它时,它会弹出下载而不是重定向。知道我做错了什么吗?
    【解决方案2】:

    可能最灵活的方法是让包含图像的文件夹远离网络服务器。然后通过 readfile() 将它们显示在您的页面上(如 Paulpro 所述)。在 php 手册中有一个很好的例子来说明如何做到这一点: http://www.php.net/manual/en/function.readfile.php 使用这种方式,您将能够非常轻松地控制用户对您网站上图片的访问。

    【讨论】:

      【解决方案3】:

      或者您可以使用 mod_rewrite 来禁用对目录列表的访问:

      RewriteEngine On
      RewriteBase /
      
      RewriteRule ^imagefiles/?$ - [F,L,NC]
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-10-01
        • 2013-11-30
        • 2018-01-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-10-01
        • 2023-03-06
        相关资源
        最近更新 更多