通常LAMP环境中,可以直接使用.htaccess防盗链。
htaccess防盗链及目录加密总结
防盗链原理:
http标准协议中有专门的字段记录referer
1、可以追溯上一个入站地址是什么
2、对于资源文件,可以跟踪到包含显示他的网页地址是什么。
因此所有防盗链方法都是基于这个Referer字段。
方法一、在httpd.conf中增加
SetEnvIfNoCase Referer “^http://zhoz\.com/” local_ref=1
Order Allow,Deny
Allow from env=local_ref
Allow from 127.0.0.1
方法二、使用rewrite,需要增加apache的mode_rewrite,支持.htaccess文件目录权限限制
要确认你的服务器或空间的服务器解译引擎为Apache2,还有支持.htaccess客户设置文件,
如果你有自己的服务器就请先对./conf/httpd.conf 文件做以下修改
找到:#LoadModule rewrite_module modules/mod_rewrite.so
把前面的 # 给去掉
找到等一个 AllowOverride None 改为 AllowOverride All
重启Apache2服务器
RewriteEngine on
RewriteCond %{HTTP_REFERER} !^http://zhoz.com/.*$ [NC]
RewriteCond %{HTTP_REFERER} !^http://www.zhoz.com$ [NC]
## 也就是只有通过这两个地址才可以下载你所提供的东东。
RewriteRule .*.(jpg|jpeg|gif|png|bmp|rar|zip|exe)$ http://www.ling1.cn/404.shtml [R,NC]
## 不是通过上面的地址访问这些为扩展名的文件时就回重定向到后面的404页面。
如果是Win主机,不支持.htaccess则可以通过新建文件,改造上面的代码的方法来实现:
1、新建一个文本文档 改名字为httpd.ini 在此文件中添加如下代码
[ISAPI_Rewrite]
CacheClockRate 3600
RepeatLimit 32
#已配置了伪静态的可以删除上面三行代码
#防盗链设置
RewriteCond Host: (.+)
RewriteCond Referer: (?!http://(?:此处填写你的域名\.cn|(.*)\.此处填写你的域名\.cn|baidu\.com|(.*)\.baidu\.com|google\.com|(.*).\google.com)).*
RewriteRule .*\.(?:jpg|jpeg|gif|png|bmp|rar|zip|exe) /zhoz.com.gif [I,O,N]
2、把httpd.ini和zhoz.com.gif上传至网站根目录
方法三、直接用PHP代码判断
$referer = $_SERVER[’HTTP_REFERER’];
$selfurl = $_SERVER[’HTTP_HOST’];
// 引用地址中是否包含host地址,不过原理就是这样,判断referer是否是本站地址。
if(false == strpos($referer,$selfurl)) {
echo 'zhoz.com提示:非法盗链!';
exit;
}
?>
[注:]
- .htaccess必须以ASCII模式上传,最好将其权限设置为644。
错误文档的定位
常用的客户端请求错误返回代码:
401 Authorization Required
403 Forbidden
404 Not Found
405 Method Not Allowed
408 Request Timed Out
411 Content Length Required
412 Precondition Failed
413 Request Entity Too Long
414 Request URI Too Long
415 Unsupported Media Type
常见的服务器错误返回代码:
500 Internal Server Error
用户可以利用.htaccess指定自己事先制作好的错误提醒页面。一般情况下,人们可以专门设立一个目录,例如errors放置这些页面。然后再.htaccess中,加入如下的指令:
ErrorDocument 404 /errors/notfound.html
ErrorDocument 500 /errors/internalerror.html
一条指令一行。上述第一条指令的意思是对于404,也就是没有找到所需要的文档的时候得显示页面为/errors目录下的notfound.html页面。不难看出语法格式为:
ErrorDocument 错误代码 /目录名/文件名.扩展名