Hotlink Protection的原理是利用Apache的RewriteCond功能,在得到文件请求时检测请求REFERER,只有是本网站的URL才放行。这个原理很适合自制头像的保护,因为头像只应该在本网站内部使用。

Discuz的内置头像保存在/forum/images/avatars/目录下,我只想保护这些内置头像,用户上传的头像和其他图片不去限制别人引用,因此RewriteCond代码放置在此目录即可::

\-----------------------------------------------------

RewriteEngine on

RewriteCond %{HTTP\_REFERER} !^http://chener.net/.\*$ [NC]

RewriteCond %{HTTP\_REFERER} !^http://chener.net$ [NC]

RewriteCond %{HTTP\_REFERER} !^http://chener.net/.\*$ [NC]

RewriteCond %{HTTP\_REFERER} !^http://chener.net$ [NC]

RewriteRule .\*\.(jpg\|jpeg\|gif\|png)$ http://chener.net/img/hp.gif [R,NC]

\-----------------------------------------------------

四个RewriteCond排除四种访问自己网站的方法,分别是不带www访问网站下某页面、不带www访问网站首页、带www访问网站下某页面和带www访问网站首页。符合这四种情况外的HTTP\_REFERER,并且文件以jpg或jpeg、gif、png结尾则转到http://chener.net/img/hp.gif文件处。

把这个文件保存为.htaccess,上传到/forum/images/avatars/目录下即可。如想保护整个网站的图片则上传到根目录;如想保护其他格式的文件则直接在RewriteRule中添加扩展名。

顺便说一句:这种方法有一定的局限性,比如某些下载工具可以发送自定的“引用”值;此外有些用户安装的防火墙、杀毒软件会阻止浏览器发送HTTP\_REFERER值给服务器,因此他们正常浏览会受影响。真不知道这类防火墙软件厂商是怎么想的,因为这最多只涉及隐私(而且主要是HTTP\_REFERER网站的隐私,跟访问者没什么关系),而网络安全无关。

本文来自:Concorde

标签: php

评论已关闭