我有这个上传图片的网站。 该内容仅对登录用户可见。 (使用非常简单的基于会话的身份验证) 现在该网站工作正常,但问题是当我通过网址栏直接访问图像文件夹时,所有图像都可用。 我想限制对文件夹的直接访问,因此它会显示一些错误或需要身份验证。 我该怎么办? 谢谢。
答案 0 :(得分:1)
使用mod_rewrite解决方案,以防止直接访问文件。
您需要为图片重写规则,将其放在图片文件夹中的.htaccess文件中:
Options +FollowSymLinks
RewriteEngine On
RewriteRule ^(.+\.jpg)$ img.php?img=$1 [L]
因此所有jpg请求都将被重定向到img.php脚本,该脚本包含您的逻辑:
<?php
//do your check here
$loggedin = true;
if($loggedin){
$remoteImage = $_GET["img"];
$imginfo = getimagesize($remoteImage);
header("Content-type: ".$imginfo['mime']);
readfile($remoteImage);
}
else{
echo "You are not logged in!";
}
?>
如果要添加更多图像类型,请将jpg替换为(jpg | gif | png等)。 PHP脚本应包含一些检查以防止读取其他文件等。
答案 1 :(得分:0)
只需在图像文件夹中放置一个空的index.php,这样就不会通过网络服务器列出这些文件。
答案 2 :(得分:0)
在.htaccess文件中放置以下行
Options -Indexes
答案 3 :(得分:0)
如果要阻止直接访问图像,则必须将图像放在文档根目录之外,或者阻止网络服务器提供该文件夹中的图像。
然后创建一个php文件,检查用户是否已登录并根据参数提供图像。
你可以使用它 或者使用url重写来代理对php脚本的图像调用。
<?php
if($user->check_login()){
//do some header stuff here like content length and content type
$image = lookup_image_from_parameter($_REQUEST['image']);
readfile('path/to/your/image/folder/not/in/webscope/'.$image);
}else{
die('Access not allowed');
}