Apache: rewrite跳转 防盗链

实验环境

第一台centos7源码安装apache2.4.38 IP 192.169.1.13 关闭防火墙

一.rewrite跳转

Rewrite主要的功能就是实现URL的重写。它的正则表达式是基于Perl语言,入站的规则用于修改 HTTP 请求 Url。这些规则可以为以下几个目的,如演示对用户更加友好的 URL 命名空间为您的 Web 站点,将请求的 Url 重定向到新位置,或阻止访问 Url 来提供服务。

简单来说,作用就是,例如输入baidu.com实际上跳转跳转到了www.baidu.com,这就是rewrite跳转, 只是对用户访问的URL更加友好

本例网站域名为www.ajbn.com,例如的访问ajbn.com.cn,或者ajbn.com都跳转到www.ajbn.com

1.安装rewrite模块

就使用DOS模式安装了,你在源码编译的时候 --enable-rewrite方式
不过编译的时候安装的,检测不出来,最好使用DOS安装一次
[root@apache1 ~]# apxs -c -i -a /root/httpd-2.4.38/modules/mappers/mod_rewrite.c
[root@apache1 ~]# apachectl -M | grep rewrite
rewrite_module (shared) #DOS安装方式

2.修改配置文件

跳转可以基于指定某个虚拟主机,和基于某个指定目录,我们这里做全局配置,就是所有目录,和所有虚拟主机生效

进入主配置文件修改参数

[root@apache1 ~]# vim /usr/local/httpd/conf/httpd.conf
搜索Group 关键单词,在下面添加如下内容

RewriteEngine on
RewriteCond %{HTTP_HOST} !^www.ajbn.com [NC]
RewriteCond %{HTTP_HOST} !^192.168.1.13 [NC]
RewriteCond %{HTTP_HOST} !^$
RewriteRule ^/(.*) http://www.ajbn.com/ [L]

在这里插入图片描述
解释一下
RewriteEngine on `:开启rewrite跳转

RewriteCond %{HTTP_HOST} !^www.ajbn.com [NC]:表示客户端访问的域名(主机头)不是www.ajbn.com, [NC]意思是忽略客户端访问域名大小写

RewriteCond %{HTTP_HOST} !^192.168.1.13 [NC]:表示客户端不是用192.168.1.13IP访问的,这里[NC]没什么作用

RewriteCond %{HTTP_HOST} !^$ :访问域名(主机头)不为空的`

RewriteRule ^/(.*) http://www.ajbn.com/ [L] :表示如果客户端访问的域名(主机头),复合上面条件,则直接跳转到www.ajbn.com ,[L]:这是最后一条规则,匹配到这里就停止

[root@apache1 ~]# echo "<h1>God Bye</h1>" >> /usr/local/httpd/htdocs/index.html
[root@apache1 ~]# /etc/init.d/apache restart

3.修改两点hosts文件

模拟公网环境,这些域名都被注册

首先是服务器本身

[root@apache1 ~]# vim /etc/hosts

127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.1.13 www.ajbn.com
192.168.1.13 ajbn.ajbn.com
192.168.1.13 ajbn.com
192.168.1.13 ajbn.com.cn

客户端

使用真机windows就可以,C:\Windows\System32\drivers\etc 有一个hosts文件,用记事本打开,滑倒最后,添加如下内容,并保存

如果保存的时候显示是另存为,不可以,就把这个文件拖到桌面,然后修改,在拖回去,覆盖
在这里插入图片描述

4.访问测试

浏览器访问测试ajbn.ajbn.com或刚刚hosts写的任意一个地址
已经跳转了,如下
在这里插入图片描述

二.配置防盗链

防盗链的概念

就是说假如一个图片我的网站上没有,而其他网站上有,当客户机访问我网站上的这个图片的时候,自动给客户机返回一个URL,而这个URL是其他人网站的,客户端自动就去指定网站了访问了,

客户端看不到这个过程,实际上一直还是在我的网站上,浪费了他人网站的带宽,骗取了浏量

防盗链就是为了,拒绝转发过来的这种连接,而返回一个自己定义资源,不会影响正常连接

1.模块

还是上面的机器
防盗链,需要安装并开启rewrite模块,我们上面DOS安装时默认就开启了就不开了,就是如下,进到httpd.conf中

LoadModule rewrite_module     modules/mod_rewrite.so

2.修改配置文件

我们这里也是做全局的,最所有目录,和虚拟主机生效

[root@apache1 ~]# vim /usr/local/httpd/conf/httpd.conf
为防止干扰,把我们上面添加的rewrite的语句都删了,添加如下语句,还是关键词Group下面

RewriteEngine on
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !ajbn\.com/.*$ [NC]
RewriteCond %{HTTP_REFERER} !www\.ajbn\.com/.*$ [NC]
RewriteRule .*\.(gif|jpg|swf)$ http://www.ajbn.com/2.jpg [R,NC,L]

在这里插入图片描述
解释
RewriteEngine on :开启rewrie跳转,必须要开启,否则无法实现
RewriteCond %{HTTP_REFERER} !^$:主机头不是空的
RewriteCond %{HTTP_REFERER} !ajbn\.com/.*$ [NC] :主机头不是ajbn.com,[NC]忽略主机头大小写的意思
RewriteCond %{HTTP_REFERER} !www\.ajbn\.com/.*$ [NC] :主机头不是www.ajb.com

RewriteRule .*\.(gif|jpg|swf)$ http://www.ajbn.com/2.jpg [R,NC,L] :满足上述条件的,返回自己指定的一张图片,不符合上述条件返回正确的图片
[R] 是强制跳转的意思 [L] 这是最后一条规则

(gif|jpg|swf) 和后面的网站和路径的意思是,就是如果本网站上这些格式的资源,被盗用,则返回自己指定图片2.jpg,如果不是这些格式则正常显示被盗用图片

3.准备两张内容不一样的jpg格式图片

在windows中命名为1.jpg 和 2.jpg 上传到apache服务器的/usr/local/htdocs/下
在这里插入图片描述
1.jpg作为被盗图片,2.jpg作为返回图片
[root@apache1 htdocs]# /etc/init.d/apache restart

4.再开启一台虚拟机作为盗用图片机器

再开启一台centos7,IP 192.168.1.14 ,关闭防火墙,yum安装httpd服务
[root@apache2 ~]# yum -y install httpd
[root@apache2 ~]# cd /var/www/html/
[root@apache2 html]# ls
[root@apache2 html]# vim index.html
<h1>盗取图片测试 </h1>
<a href="http://www.ajbn.coim/1.jpg">测试</a>

5.测试盗取图片

访问192.168.1.14,并点超链接,
在这里插入图片描述
访问的是1.jpg,显示的是2.jpg的内容,因为这种属于经过网站转发的连接,就是所说的盗图片,就会显示我们上面指定的图片
如果提示重定向过多,或者显示的是1.jpg就是浏览器的问题,多换几个浏览器试一试就可以
在这里插入图片描述
正常访问1.jpg而不经过网站的转发(盗)不会出问题
在这里插入图片描述

实验成功 !!

发布了54 篇原创文章 · 获赞 57 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/weixin_45308292/article/details/104690423