我正在使用.htaccess规则来直接阻止图像目录访问。这是.htaccess代码
Deny from all
我把这个.htaccess文件放到了图像目录。
问题是,当我尝试访问网页中的某些图片时,它无法加载图片错误,或者您可以说图片不存在。
<img class="highlight-right wow animated" src="/img/spark.png" height="192" width="48" alt="">
我想拒绝直接访问它的人访问,但至少它应该在网页上工作。
对此提出任何建议。
修改 我试过这条规则
RewriteCond %{HTTP_REFERER} !^http://(www\.)?localhost/ [NC]
RewriteRule \.(jpe?g|gif|bmp|png)$ - [F,NC]
和
RewriteEngine on
RewriteCond %{HTTP_REFERER} !^http://(www\.)?localhost [NC]
RewriteCond %{HTTP_REFERER} !^http://(www\.)?localhost.*$ [NC]
RewriteRule \.(gif|jpg|png)$ - [F]
但由于图片没有显示在网页上,两者都无效。
答案 0 :(得分:1)
您可以将.htaccess
设置为根据引荐来阻止它们,如下所示:
RewriteEngine on
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^http(s)?://(www\.)?yoursite.com [NC]
RewriteRule \.(jpg|png|gif)$ http://yoursite.com/errorImage.jpg [NC,R,L]
请注意,HTTP_REFERER
不可靠,因为它可以在客户端的浏览器中进行更改,但它是最简单,最有效的方法。
更强大的方法需要使用cookie或会话,但这会增加服务器负载,从而缩短响应时间。
答案 1 :(得分:1)
我想拒绝直接访问它的用户,但至少是它 应该在网页上工作。
1。在.htaccess
使用Deny from all
规则阻止所有直接访问。
2. 更改图片源链接以引用负责返回正确图片的PHP脚本。
<img src="/path/to/images.php?f=spark.png">
注意我是如何在参数中传递图像名称的?这就是PHP如何知道请求哪个图像。在 images.php 中执行:
$IMG_DIR = '/path/to/images'; //put all protected images here
$img = $_GET['f']; //the file's name, matches the f= parameter in <img>
$img_path = $IMG_DIR."/$img";
if(!is_file($img_path)){ // make sure this image exists
http_response_code(404); //404 not found error
exit;
}
$extension = pathinfo($img,PATHINFO_EXTENSION); //eg: "png"
$mimetype = "image/$extension"; //type of image. browser needs this info
$size = filesize($img_path);
//tell the browser what to expect
header("Content-Type: $mimetype");
header("Content-Length: $size");
//send the file to the browser
readfile($img_path);
我不在这里,但这种方法允许您根据需要限制访问。例如,您可以在决定是否返回图像之前,通过查看$_SESSION
内容来测试用户是否已登录。