使用mod_rewrite进行文件访问控制

时间:2010-11-19 17:18:17

标签: php apache mod-rewrite web apache2

我想限制对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(在子请求中)来加载文件(这次没有处理程序.php),那将会很棒。

在我的情况下,我不想像mod_auth那样严格保护资源,因为我只想在成熟内容中添加免责声明(绘制的艺术品包含血液,对儿童不利)。如果找不到cookie,我想显示免责声明,如果有cookie,我可以显示图片。

1 个答案:

答案 0 :(得分:1)

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

REVISED:

在这种情况下,我建议你研究working with cookies and .htacces

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