{{ cat }}'s docs

22.5.0: 访问控制-防盗链


0. 配置加载模块

## 主配文件中确认加载以下两个模块
LoadModule rewrite_module modules/mod_rewrite.so
LoadModule setenvif_module modules/mod_setenvif.so

## 重载配置,查看模块是否加载
# apachectl -M | grep -E "setenvif|rewrite"
 setenvif_module (shared)
 rewrite_module (shared)

1. 配置防盗链

方法1:setenvif方式

##虚拟主机配置文件中配置
SetEnvIfNoCase Referer ".*example\.com" local_ref=1
<Filesmatch ".*\.(gif|jpe?g|png|mp4)">
        Require env local_ref
</Filesmatch>

方法2:rewrite方式

## 虚拟主机配置文件中配置
RewriteEngine On
RewriteCond %{HTTP_REFERER} !^http://example.com/.*$ [NC]
RewriteCond %{HTTP_REFERER} !^http://example.com$ [NC]
RewriteCond %{HTTP_REFERER} !^http://www.example.com/.*$ [NC]
RewriteCond %{HTTP_REFERER} !^http://www.example.com$ [NC]
RewriteRule .*\.(gif|jpg|swf)$ http://www.example.com/about/nolink.png [R,NC]
## 若不是example.com来的访问,则rewrite到nolink.png这张图片上去

2. 扩展

1) apache 2.2的方法1配置

SetEnvIfNoCase Referer ".*example\.com" local_ref=1
<filesmatch "\.(txt|doc|mp3|zip|rar|jpg|gif)">
    Order Allow,Deny
    Allow from env=local_ref
</filesmatch>

## 防盗链原理
分析referer变量值,如果不是信任域名来源,则屏蔽
缺点是,访问时可以修改referer变量,所以,只是简单的屏蔽

Contents