我正在制作一个社交网站,人们可以在其中发布只有他们的朋友才能看到的照片。我将图像存储在一个名为照片的文件夹中。我希望只能通过 html 标签 img 查看图像,因此如果有人直接在浏览器中键入 img url,我希望它返回 403/404 或其他内容。如何使用 htaccess 完成此操作?
2 回答
据我所知(如果您不知道,请有人纠正我),这对于 htaccess 是不可能的,因为它需要知道您的朋友是谁才能让他们看到图像。
相反,您必须使用 PHP 之类的东西进行一些 cookie 身份验证,以找出请求者是谁,然后检查他们的朋友/共同朋友等是否与图像所有者,如果允许他们查看图像,则以这种方式提供图像. 虽然这是一个非常费力的过程(提供静态图像已经够难了!),所以一般技术是使用长而笨拙的 URL,这样他们就不会被别人猜到,然后就这样(即允许你做的)重新试图阻止)。
或者,再次使用 PHP,检查 HTTP_REFERER 标头。如果从页面内请求,它将被设置为您的页面 URL。否则它将为空白或其他内容。但这是不可靠的——一些浏览器根本不发送它,而且它很容易被伪造。
或者,您可以强制执行一个时间窗口,其中只能在初始页面加载后的 10 秒内请求图像。不过,这对连接速度较慢的人来说是不利的。
从根本上说,没有什么能阻止有人截屏,或者在许多成像网站上流行的截屏,直接给屏幕拍照。
正如其他答案所恰当指出的那样,您不能使用 htaccess 来做到这一点,但是您可以创建一个 php 脚本来控制谁可以访问图像,我们称之为imgsrc.php
$file = $_GET['file'];
if(user_allowed_access($file)){
$ext = substr($file, strrpos($file, '.') + 1);
header('Content-type: image/' . $ext);
readfile($file);
} else {
header('Content-type: image/png');
readfile('some/default/file.png');
}
然后为你的<img>
标签有 src
<img src="/imgsrc.php?file=path/to/image.png" />
然后在你.htaccess
的图片目录中放
Order deny, allow
Deny from all
Allow from localhost
以上都没有经过测试,但你应该明白