6.伪静态(3) --- 防盗链

1.  在一个项目中有两个文件夹,publicprivate ,public文件夹的图片可以被所有人访问.
private只能自己访问.请问如何实现.

第一个方法是. 在 publicprivate 下创建 .htaccess 文件,对于private 只让127.0.0.1访问 public 文件都可以访问

private 文件夹下的配置 .htaccess

Order deny, allow
deny from all
allow from 127.0.0.1

这个的缺点是,没有办法去控制,本apahce的另外一个虚拟主机请求., 另外不能精细化控制,于是我们就换了一个思路使用 http的 referer头信息搞定这个防盗链需求.

6.伪静态(3) --- 防盗链_第1张图片
6.伪静态(3) --- 防盗链_第2张图片
6.伪静态(3) --- 防盗链_第3张图片
6.伪静态(3) --- 防盗链_第4张图片

<ifModule rewrite_module>
RewriteEngine On
#Cond => condition(情况) ,如果不是 www.test1.local ,就禁止,
#Cond 相当于if ,Rule 相当于 执行语句
RewriteCond %{HTTP_REFERER} !http://test1.local/index.php
#如果你请求的是一个 png 图片,就禁止
RewriteRule .*\.png -[F]
</ifModule>

#这样就可以拒绝 同一台 apache 的其他虚拟主机
#但是,道高一尺魔高一丈,可以自己写代码,模拟 HTTP 请求

效果如下:
6.伪静态(3) --- 防盗链_第5张图片
6.伪静态(3) --- 防盗链_第6张图片

第二方法.在private 文件夹下 .htaccess
<ifModule rewrite_module>
RewriteEngine On
#你怎么知道,这个请求就是www.hsp.com发来的. referer
#如果你请求的是一个jpg图片, 就禁止
RewriteCond %{HTTP_REFERER} !www.hsp.com  
RewriteRule .*\.jpg -[F]
</ifModule>

☞ 说一下如果你的RewriteCond有多个条件
<ifModule rewrite_module>
RewriteEngine On
#你怎么知道,这个请求就是www.hsp.com发来的. referer
#如果你请求的是一个jpg图片, 就禁止
RewriteCond %{HTTP_REFERER} !www.hsp.com 
#RewriteCond %{ REQUEST_FILENAME} !-f
RewriteRule .*\.jpg -[F]
</ifModule>

6.伪静态(3) --- 防盗链_第7张图片

这里写图片描述

对昨天讲解的内容的补充说明
1.  关于404的说明  就是对于ie浏览器而言,404页面的内容大小不能低于512b字节
2.  如果你在<Directory>节点配置了 Options Indexes , 同时你有启用了 rewriteEngine On你会看到403 的禁用提示., 原因是因为 我们的父级目录的Options 本身就配好 ,
Options Indexes FollowSymLinks  ,所以,我们要么就不配,要么就一样.
类似于继承 ? 只能扩大权限 ?

6.伪静态(3) --- 防盗链_第8张图片
6.伪静态(3) --- 防盗链_第9张图片
6.伪静态(3) --- 防盗链_第10张图片

<IfModule rewritemodule>
    RewriteEngine On
    RewriteRule index\/login index.php?c=index&a=login
    #扩展,对于任何URL都可以
    RewriteRule ([a-zA-Z_]+)\/([a-zA-Z_]+) index.php?c=$1&a=$2
    #不是文件走重新规则
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule abc.html index.php
</IfModule>

6.伪静态(3) --- 防盗链_第11张图片
6.伪静态(3) --- 防盗链_第12张图片

你可能感兴趣的:(.htaccess)