2011-03-21 31 views
1

所以我建立一个网站,用户可以看到一个较小的图像预览,他们必须注册才能看到完整的决议。mod_rewrite形象保护

我不缩略图,我只是加载整个图像,并缩放它。由于图像的分辨率较低,这并不是一个真正的问题。

问题是,用户只需右键单击图像选择“在新标签中打开”,他们就可以了。我想以一种可以在浏览器中以-tag显示.jpg和.gif文件的方式禁用该功能,但是当他们尝试在地址栏中输入路径时不能这样做。

我在Apache上。

这可能吗?提前致谢。

回答

0

您将需要缩略图版本和大版本。当你缩小尺寸时,你只能缩小显示尺寸。全尺寸图像实际上已经在他们的计算机上。

+0

这不是一个真正的问题。我的观众并不擅长电脑。而且即使这会发生几次,这不是什么大不了的事情。我只是想知道如果我可以用mod_rewrite更好地保护它。但谢谢你的回答。 – priktop 2011-03-21 17:12:37

0

东西线沿线的:

RewriteEngine On 
RewriteCond %{HTTP_REFERER} !^$ 
RewriteCond %{HTTP_REFERER} !^http://www.yourdomain.com/.*$ [NC] 
RewriteCond %{HTTP_REFERER} !^http://yourdomain.com/.*$  [NC] 
RewriteRule ^/PublicFiles/*$ /page-about-direct-links.html 

未经检验

+0

谢谢克里斯,我不在我的工作电脑附近,但是当我测试它时,我会让你知道。 – priktop 2011-03-22 10:53:30

+0

我看到你想要阻止“在新标签中查看” - 在这种情况下检查引用链接将不起作用,因为引用链接可能仍将设置为您的网站。 在任何情况下,如果有人真的想要击败这种保护措施是微不足道的。引用者由客户端设置,因此您可以随意更改它,而不需要任何服务器交互。 – 2012-03-29 20:18:59

0

更改方法:

  1. 如果你是显示小图,从不使用原始图像。这将需要更长的时间来加载,这是一个不好的习惯。改为使用缩略图,节省带宽,加速页面。

  2. 将原始图片移到web文件夹的旁边。这样他们就不能通过链接直接访问。

  3. 制作一个php脚本,如果用户注册,将会加载原始图像。

mod_rewrite无法检查用户是否已注册或登录。至于阿帕奇“basic authentican”可以使用(但不是最好的办法)。

function getImageFromOutside ($homePath, $file) 
{ 
    if (file_exists ($homePath . '/' . $file)) 
    { 
     $contents = file_get_contents ($homePath . '/' . $file); 
     return $contents; 
    } 
} 
$homePath = 'some_path/img'; 

if (isset ($_GET['uid'])) 
{ 
    $img = $_GET['uid'] . '.jpeg'; 
    header ('Content-type: image/jpeg'); 
    echo getImageFromOutside($homePath, $img); 
} else { 
    print_r ($_GET); 
    echo file_exists ($homePath . '/' . $file); 
} 

测试,用文件夹结构

    • IMG
    • publichtml
+1

对此感兴趣。如何将图片移动到网页文件夹外,但仍然通过网站查看它们? – Kit 2011-03-21 17:16:06

+0

您可以在网页文件夹之外拥有文件夹,如日志等。PHP具有与您一样的读/写权限,并且可以访问这些文件夹中的文件。 – Bakudan 2011-03-21 17:20:41

+0

因此,我可以在我的'publichtml'文件夹(这是我的根目录)之外有一个图像,我仍然可以从我的网站访问?我将如何参考它? – Kit 2011-03-21 17:24:34