我在一个聊天网站上工作,它具有发送图像给用户的功能,这些图像将保存到他们的用户文件夹中,如此user/newuser/a.jpg(意味着每当用户注册时,我会在主用户文件夹名称中创建一个文件夹,如此user/newuser)。
但这里出现的问题是,这张图片是为了看到只有发送者和接收者,而不是每个人,但每个人都与url可以很容易地看到这样的图像http://localhost/chat/user/abc.jpg。所以,我想出了我将限制访问用户文件夹与htaccess和重定向所有请求到user/index.php与此代码。
RewriteRule ^user(/.*)?$ user/index.php [QSA]
然后从这个user/index.php我将重定向用户到user/username/userimage.jpg与此代码.
session_start();
$imageName = str_replace('/chat/','',$_SERVER['REQUEST_URI']);
if(in_array($imageName,$_SESSION['imageArray'])){
/**$_SESSION['imageArray'] contains all images name which can be accessed by the logged in user like this
*['user/newuser/abc.jpg','user/newuser/1.jpg',]
*/
header('location:'.substr($imageName,strrpos($imageName,'/')+1)); //just output image.jpg
}
else{
echo 'you are not allowed to access this resource';
}
但它没有工作的方式,它应该是,如果用户可以访问图像,它结束了重定向一次又一次,如果没有,那么它只是说you are not allowed to access this resource
。
现在,如果你理解我的问题,希望告诉我如何实现这一点,如果它不能实现与htacess然后我应该做什么,什么是最好的和有效的方式来处理这样的情况.我不想使用readfile函数读取文件和类似的东西,因为它会消耗大量的服务器资源.任何帮助是高度赞赏.先谢谢你了。
我知道htaccess是重定向时,图像可以访问,因为我的htaccess条件,任何请求到用户文件夹应重定向到用户/index. php。但我不想重定向任何请求,这是在用户/index. php访问任何用户文件夹资源.我不擅长.htaccess代码,所以如果你能解释一下你提供的任何代码,那就太好了。
2条答案
按热度按时间lyfkaqu11#
下面是一些粗略的示例代码,它近似于存储和检索存储在网站docroot之外的文件的样子。
get_file.php
serve_file.php
oknwwptz2#
最后,我提出了一个可行的解决方案。检查出来,如果有任何错误,请通知我的意见。让我们开始,这一行在.htaccess
将所有请求从user文件夹重定向到user/index.php,在这个文件中,这是我在那里做的基本示例。
使用此代码,只有用户可以访问他们被允许访问的图像。任何无法访问图像的人都会被发送到404页面。下面是我的代码,我检索图像。
感谢Sammitch Answer先生的帮助。如果这个答案或问题对任何人都有帮助,请投赞成票。谢谢