为了本篇章的内容更容易看出效果,会联合两台虚拟机一起做实验。为了更快速能够使用上apache服务。直接对另一台虚拟机实现apache绿色移植。
linux编译安装一个软件包后全部内容都会存在一个文件夹中,因此只需直接拷贝相应服务的文件夹过去即可:
apache绿色移植
[root@DMZ-httpd /usr/local]# scp -r apr apr-util/ apache24/ 192.168.1.20:/usr/local/

rewrite模块–重定向

当一个站点的内容搬迁到另一个站点时,为了防止用户群体丢失,当访问原来站点的域名会自动跳转到新域名的站点中。
实现目标:访问server4的www.class.com/image 时,自动跳转到server3的www.gz.com/blog.html。 如果访问www.class.com 其他目录,则不会跳转。
在server4的配置文件中的设置:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
<VirtualHost *:80>
DocumentRoot "/data/web-data/class.com"
<Directory "/data/web-data/class.com">
Options None
AllowOverride None
Require all granted
</Directory>
ServerName www.class.com
RewriteEngine On
##匹配条件 内置环境变量 正则表达式
RewriteCond %{HTTP_HOST} !^$
RewriteCond %{HTTP_HOST} www\.class\.com/images [NC]
RewriteRule ^.*$ http://www.gz.com/blog.html [R=301,NC,L]
ServerAdmin 123123@qq.com
ErrorLog "logs/class.com-error_log"
CustomLog "logs/class.com-access_log" commona
<IfModule dir_module>
DirectoryIndex index.html
</IfModule>
</VirtualHost>

注:
[ NC] 指的是不区分大小写
[R] 强制重定向 redirect
字母 L 表示如果能匹配本条规则,那么本条规则是最后一条(Last),忽略之后的规则
RewriteCond可以有多个,每个RewriteCond直接为“与”关系,只有全部满足,才执行RewriteRule选项的内容

开启rewrite模块:

1
LoadModule rewrite_module   modules/mod_rewrite.so

rewrite模块–防盗链

开启rewrite模块:

1
LoadModule rewrite_module   modules/mod_rewrite.so

在需要实现防盗链的虚拟主机下添加配置:

1
2
3
4
5
6
7
8
9
10
RewriteEngine On
##浏览器输入域名不为空
RewriteCond %{HTTP_REFERER} !^$
##浏览器不是直接访问gz.com,而是由其他站点链接过来
RewriteCond %{HTTP_REFERER} !gz\.com
##请求以图片格式结尾的内容
RewriteCond %{REQUEST_URI} \.(jpg|jpeg|gif|png)$ [NC]
##请求的不是foo.jpg。如果没有这条,当执行RewriteRule的时候会请求一个foo.jpg图片,然后陷入死循环
RewriteCond %{REQUEST_URI} !images/foo\.jpg
RewriteRule ^.*$ http://www.gz.com/images/foo.jpg [R=301,NC,L]

HTTP Referer:是header的一部分,当浏览器向web服务器发送请求的时候,一般会带上Referer,告诉服务器该网页是从哪个页面链接过来的,服务器因此可以获得一些信息用于处理。
例如:在http://www.new.com/ 的首页中链接了一张www.gz.com 站点的图片,这在开发者模式下查看回有以下结果:
浏览器status验证

站点伪静态化

动态页面:每次访问根据客户的不同操作可以得到不同结果。(类似与函数中的参数传值,返回结果)
优点:节省资源空间,方便管理人员管理。如简单的学生信息管理系统只需要创建一个数据库,再创建一个静态页面模板,根据客户输入一个的学生信息在页面中实时输出学生信息。
静态页面:页面内容已经固定,每次访问结果都是一样。
优点:用户访问方便,无需进行传参操作。
动态页面——->静态页面:把数据库的每一条学生数据都提前为一个个静态页面。
页面
伪静态页面是无需客户输入,也能实现类似访问静态页面,但其实是在访问动态页面。静态页面让百度爬取的到几率大,方便网站推广
开启rewrite模块:

1
LoadModule rewrite_module   modules/mod_rewrite.so

在需要实现防盗链的虚拟主机下添加配置:

1
2
3
RewriteEngine On
##\d表示数字
RewriteRule /news/(\d+)\.html$ http://www.gz.com/news/a.php\?id=$1

浏览器输入:
页面
敲击回车键:
页面

总结

本篇章主要是学习apache的rewrite模块,只要使用的功能选项
RewriteCond—–匹配条件
RewriteRule—–实现功能(重定向、防盗链、伪静态….)
只要能够熟练使用正则表达式匹配、apaache内置环境变量作用、逻辑清晰地整理出需求的实现条件,定能完成业务需求。
Apache的rewrite模块官方文档

× 请我吃糖~
打赏二维码