【问题标题】:File-Access-Control with mod_rewrite带有 mod_rewrite 的文件访问控制
【发布时间】:2011-05-12 18:32:12
【问题描述】:

我想限制对 Apache 中文件的访问。 受限制文件的列表应该是可变的。 如果文件访问受到限制并且未找到特定的 cookie,则用户 应该被重定向到一个网站(有可能获取 cookie) - 如果找到,文件将被“加载”。

我想用 mod_rewrite 解决这个问题。

我的想法是我将所有请求重定向到 handler.php 脚本。

这个“handler.php”查找请求并决定是否允许访问。到这里没问题。

现在的问题是 - 如果允许访问 - 必须加载文件。因此,我不知道 mime、filesize 等。

当然,我可以写类似的东西

if ($ext == '.jpg') header('Content-Type: ...');

但我不想使用这个解决方案,因为我想处理所有可能的文件(png、gif、exe、mp3、zip、ETC)。问题是我无法知道所有的 mime 类型。

如果我可以调用 Apache(在子请求中)来加载文件(这次没有 handler.php),那就太好了。

就我而言,我不想像 mod_auth 那样严格地保护资源,因为我只想为成熟的内容添加免责声明(包含血液且不适合儿童的绘画作品)。如果没有找到cookie,我想显示免责声明,如果cookie在那里,我可以显示图片。

【问题讨论】:

    标签: php apache mod-rewrite web apache2


    【解决方案1】:

    考虑到您想阻止对给定路径下所有资源的访问,在我看来,Apache authorization 对您来说可能是更好的选择。这是一个比手动检查每个资源请求的会话更简洁的解决方案,而且您不会遇到您所描述的内容类型处理问题。

    修订:

    在这种情况下,我建议您查看working with cookies and .htacces

    RewriteEngine On
    RewriteBase /
    RewriteCond %{HTTP_COOKIE} !CookieName= [NC]
    RewriteRule .* http://www.example.com/members/login.php [L]
    

    【讨论】:

    • 感谢您的提示。你的意思是简单的“.htpasswd”技术?当然,这是非常安全的。但就我而言,我不想以严格的方式保护资源,因为我只想为成熟的内容添加免责声明(包含血液且不适合儿童的绘画作品)。如果没有找到cookie,我想显示免责声明,如果cookie在那里,我可以显示图片。
    • @Daniel 检查修改后的帖子
    • 你好 BBonifield。感谢您的解决方案。我使用 .htaccess 和 example.php 脚本进行了尝试,该脚本显示免责声明、设置 cookie 并重新加载页面。这次加载的是真实文件。
    • 附加问题:是否正确,应该保护的所有文件/目录都需要在 .htaccess 中“硬编码”,或者是否有替代/更复杂的想法允许 PHP 处理程序脚本来决定(例如查看配置​​的数组)是否必须保护文件? (因此 HTACCESS 第一次将所有文件重定向到处理程序)。想法?还是不可能的练习?
    猜你喜欢
    • 1970-01-01
    • 2014-02-24
    • 1970-01-01
    • 2011-07-30
    • 2014-09-10
    • 2021-07-27
    • 1970-01-01
    • 1970-01-01
    • 2011-12-18
    相关资源
    最近更新 更多