nginx rewrite if 浏览器分离 防盗链
nginx rewrite if 浏览器分离 防盗链
一、Rewrite
和apache等web服务软件一样,rewrite的主要功能是实现URL地址的重定向。Nginx的rewrite功能需要PCRE软件的支持,即通过perl兼容正则表达式语句进行规则匹配的。默认参数编译nginx就会支持rewrite的模块,但是也必须要PCRE的支持
Rewirte功能就是,使用nginx提供的全局变量或自己设置的变量,结合正则表达式和标记位实现URL重写以及重定向。
Rewrite只能放在server{},location{},if{}中,并且默认只能对域名后边的除去传递参数外的字符串起作用。例如http://www.cy.com/abc/aa/index.php?a=1&b=2 只对/abc/aa/index.php重写
URL:就是具体路径/位置
URI:指的是一个拥有相同类型/特性的对象集合
Nginx:通过ngx_http_rewrite_module模块支持URL重写,支持if条件判断,但不支持else。
跳转:从一个location跳转到另一个location,循环最多可以执行10次,超过后nginx将返回500错误。
PCRE支持:perl兼容正则表达式的语法规则匹配
重写模块set指令:创建新的变量并设其值
//语法格式:
rewrite [flag];
regex:表示正则匹配规则
replacement:表示跳转后的内容
flag:表示rewrite支持的flag标记
//flag标记说明:
last:本条规则匹配完成后,继续向下匹配新的location URL规则,一般用在server和if中。
break:本条规则匹配完成即终止,不在匹配后面的任何规则,一般使用在location中。
redirect:返回302临时重定向,浏览器地址会显示跳转后的URL地址
permanent:返回301永久重定向,浏览器地址栏会显示跳转后的URL地址。
匹配正则的标识符和意义
^ 必须以^后的实体开头
$ 必须以$前的实体结尾
. 匹配任意单个字符
[] 匹配指定字符集的任意字符
[^] 匹配任何不包括在指定字符集内的任意字符串
| 匹配|之前或之后的实体
() 分组,组成一组用于匹配的实体,通常会有|来协助
\ 转义
* 匹配前面的字符出现零次或者多次,如“ab*”能匹配a、ab、abb
+ 匹配前面的字符出现一次或者多次,如“ab+”能匹配ab、abb,但是不能匹配a
? 匹配前面的字符出现零次或者一次,如“ab(cd)?”能匹配ab、abcd
(pattern) 匹配括号内pattern并可以在后面获取对应的匹配,常用$0-9属性获取小括号中匹配的内容。如(hello∣chenyu)9属性获取小括号中匹配的内容。如^(hello | chenyu)9属性获取小括号中匹配的内容。如(hello∣chenyu) //字符串为“hello chenyu”,可以捕获的结果为:
$1=hello$2=chenyu 这些被捕获的数据,在后面就可以当作变量一样进行使用了
一、nginx的rewrite功能在企业里应用非常广泛
1、可以调整用户浏览的URL,看起来更规范,合乎开发及产品人员的需求
2、为了让搜索引擎搜录网站内容及用户体验更好,企业会将动态的URL地址伪装成静态地址提供服务
3、网址更新域名后,让旧的访问跳转到新的域名上,例如访问京东的360buy.com会跳转到jd.com
4、根据特殊变量、目录、客户端的信息进行URL调整等。
三、rewrite配置
//nginx访问自定义网页
[root@ws ~]# cd /usr/local/nginx
[root@ws nginx]# ls
client_body_temp conf fastcgi_temp html logs proxy_temp sbin scgi_temp uwsgi_temp
[root@ws nginx]# cd html/
[root@ws html]# ls
50x.html imgs index.html
[root@ws html]# cd imgs/
[root@ws imgs]# ls
linux.jpg
[root@ws imgs]# nginx -s reload
//浏览器访问
1、flag标记–break
[root@ws html]# mv imgs/ images
[root@ws html]# ls
50x.html images index.html
[root@ws html]#
再次访问会发现404找不到网页
//需要写rewrite
[root@ws html]# nginx -s reload
//再次浏览器访问访问,路径不变http://192.168.110.10/imgs/linux.jpg
//还可以使用break,让我们访问得站点跳转到百度得首页
//浏览器访问http://192.168.110.10/imgs/linux.jpg
2、flag标记-last
//也可以实现跳转到百度
2、flag标记–redirect
3.flag标记–permanent
四、if判断
可以使用在server段和location段
语法:
if (condition) {…}
常见的condition:
(1)变量名
(2)以变量名为操作数构成的比较表达式(可使用=,!=类似的比较符进行测试)
-
(3)正则表达式的模式匹配操作
- 区分大小写的模式匹配检查
~* 不区分大小写的模式检查
(4)测试指定路径为文件的可能性(-f !-f)
(5)测试指定路径为目录的可能性(-d !-d)
(6)测试文件的存在性(-e !-e)
检查文件是否有执行权限(-x !-x)
1、配置基于域名跳转
假如现在公司旧的域名www.cy.com有业务需求,需要使用新的域名www.chenyu.com代替,但是旧域名不能废除,需要跳转到新的域名上,而且后面的参数保持不变
真机的浏览器访问的前提
!-f)
(5)测试指定路径为目录的可能性(-d !-d)
(6)测试文件的存在性(-e !-e)
检查文件是否有执行权限(-x !-x)
1、配置基于域名跳转
假如现在公司旧的域名www.cy.com有业务需求,需要使用新的域名www.chenyu.com代替,但是旧域名不能废除,需要跳转到新的域名上,而且后面的参数保持不变
真机的浏览器访问的前提