蒙面人生蒙面人生

apache 防盗链解决方案之二

使用.htaccess文件
首先,要确保开启了RewriteEngine。
apache中默认是不使用.htaccess文件的
与之相关的两个参数是 AllowOverride 和 AccessFileName
AllowOverride的全称是分布式配置文件功能。
默认时该指令设置为none,此时 .htaccess文件会被完全忽略。事实上,服务器根本不会读取.htaccess文件。
如果该指令设置为 All 时,所有具有 .htaccess 作用域的指令都允许出现在.htaccess文件中。
该指令还有其它几个值,比如AuthConfig,FileInfo ,Indexes,Limit,Options[=Option,...],此处不一一介绍。
一般要使.htaccess生效,将其设置为all。
另外,Allowoverride指令仅在不包含正则表达式的<Directory>配置段中才是有效的。这个很重要,单独修改httpd.conf中的那一行 Allowoverride none是没用的。
例如,在我服务器上的配置为

<Directory "/data/htdocs/spacemx/user">
AllowOverride All
</Directory>

其中的 /data/htdocs/spacemx/user 是用户数据的根目录,就是本例要保护防盗链的目录。
这三行配置可以写在虚拟主机配置段内,也可以写在段外。
另外一个参数AccessFileName,默认值为 .htaccess,当然,你可以修改为任意的你想要的文件名。
配置好apache之后,然后就来写 .htaccess文件了,该文件最好放置在你要保护的位置的根目录
我服务器上的.htaccess文件的内容为

RewriteEngine on
RewriteCond %{HTTP_REFERER} !^$ [NC]
RewriteCond %{HTTP_REFERER} !admin99.net [NC]
RewriteRule .*\.(gif|jpg|jpeg)$ http://www.admin99.net/xianzhi.gif [R,NC,L]

通过这个配置,所有盗链的图片均被rewrite到了自己设置的图片上,警示别人不允许盗链。
RewriteCond声明了生效的条件,在引用地址不是本站的时候,开始生效。
RewriteRule设置了规则,即,把盗链全部转向到设置好的警示图片。

.htaccess中的内容也可以直接写入httpd.conf中的虚拟主机配置段内,那样的话,就不需要设置.htaccess文件了。
apache的功能真是太强大了,这也直接导致它成了一个重型的web服务器,相比于后起的轻型web服务器lighttpd和Nginx 之流,他在响应速度方面已经远远落后了。但在稳定性和功能性依然遥遥领先。

本原创文章未经允许不得转载 | 当前页面:蒙面人生 » apache 防盗链解决方案之二

评论