- 一、rewrite跳转场景
- 二、Rewrite实际场景
- 1、Nginx跳转需求的实现方式
- 2、rewrite放在server,if,location段中
- 3、对域名或参数字符串
- 三、正则表达式
- 1.字符说明
- 2.rewrite命令
- 四、location分类
- 1、location分类
- 2、location 优先级
- 3、Rewrite和Location的小结
- 五、rewrite6种跳转
- 1.基于域名跳转
- 2、基于客户端IP访问跳转
- 3.基于旧域名跳转到新域名后面加目录
- 4、基于参数匹配(多余的)的跳转
- 5、基于目录下所有 php 结尾的文件跳转
- 6、基于最普通一条 url 请求的跳转
- 总结
Rewrite跳转场景
URL看起来更规范、合理
企业会将动态URL地址伪装成静态地址提供服务
网址换新域名后,让旧的访问跳转到新的域名上
服务端某些业务调整
使用rewrite进行匹配跳转
使用if匹配全局变量后跳转
使用location匹配再跳转
location只对域名后边的除去传递参数外的字符串起作用
3、对域名或参数字符串●使用if全局变量匹配
●使用proxy_pass反向代理
^ 匹配输入字符串的起始位置
$ 匹配输入字符串的结束位置
* 匹配前面的字符0次或多次
+ 匹配前面的字符1次或多次
? 匹配前面的字符0次或1次
. 匹配除“n”之外的任何单个字符;字母,数字,符号都包含
将后面接着的字符标记为一个特殊字符或一个原义字符或一个向后引用;使用诸如"[.n]" 之类的模式,可匹配包括"n" 在内的任意字符
w 匹配字母或数字或下划线或汉字
s 匹配任意的空白符
b 匹配单词的开始和结束
d 匹配纯数字
{n} 重复n次
{n,} 重复n次或更多次
[] 定义匹配的字符范围
[c] 匹配单个字符c
[a-z] 匹配a-z小写字母的任意一个
[a-zA-Z] 匹配a-z小写字母或A-Z大写字母的任意一个
() 表达式的开始和结束
| 或的运算符
2.rewrite命令
2、rewrite 命令
基本格式:
rewrite [flag];
regex:表示正则匹配规则
replacement:表示跳转后的内容
flag:表示rewrite支持的flag标记
其中flag标记说明包含以下
last:相当于Apache的以标记,表示完成rewrite
break 本条规则匹配完成即终止,不再匹配后面的任何规则
redirect 返回302 临时重定向,浏览器地址会显示跳转后的URL地址,爬虫不会更新url
permanent 返回301永久重定向,浏览器地址栏会显示跳转后的URL地址
精准匹配:location = / {…} 示例:location = patt {} PS: 精确匹配字符串
一般匹配:location / {…} 示例:location patt {} PS:只要包含patt的字符串即可
正则匹配: location ~ / {…} 示例:location~patt{}PS:按照正则表达式的方式匹配
=:精确匹配
^~:前缀匹配
和*:按文件中的顺序的正则匹配;这里区分匹配是文件还是目录
文件:优先级高于
目录:优先级高于
普通匹配:以xxx路径为前缀的匹配
/:通用匹配
相同点:
都能实现跳转
不同点:
•rewrite是在同一域名内更改获取资源的路径
•location是对一类路径做控制访问或反向代理,还可以 proxy_ pass到其他机器
rewrite会写在location里,执行顺序
•执行server块里面的rewrite指令
•执行location匹配
•执行选定的location中的rewrite指令
现在公司旧域名www.xgp.com有业务需求,需要使用新域名www.xb.com代替,但是旧域名不能废除,需要跳转到新域名上,而且后面的参数保持不变。
1.添加映射
2.创建日志目录
3.修改配置文件
4.验证
今天公司业务新版本上线,要求所有IP访问任何内容都显示一个固定维护页面,只有公司IP 192.168.118.155访问正常
server {
listen 80;
server_name localhost;
#charset koi8-r;
access_log /var/log/nginx/www-xgp.access.log;
set $rewrite true; #设置变量$rewrite,变量形成为布尔值为true
#判断是否为合法IP
if ($remote_addr = “192.168.118.155”) { #当客户端IP为192.168.32.155时,将变量值设为flase,不进行重写
set $rewrite true; #设置变量$rewrite,变量值为boole值true
if ($rewrite = true) {
rewrite (.+) /weihu.html;
}
location = /weihu.html {
root /var/www/html;
}
location / {
root html;
index index.html index.htm;
}
当访问的时http://bbs.xgp.com/post/1.html会自动跳转到http://www.xb.com/bbs/post/1.html
1.创建指定目录
[root@localhost log]# mkdir -p /var/log/nginx [root@localhost ~]# mkdir -p /usr/local/nginx/html/bbs/post [root@localhost ~]# echo " 您访问的是新的页面! " >> /usr/local/nginx/html/bbs/post/1.html
2.添加映射
[root@localhost ~]# vim /etc/hosts
192.168.118.155. bbs.xgp.com www.xb.com
3.修改配置文件
root@localhost ~]# vim /usr/local/nginx/conf/nginx.conf
server {
listen 80;
server_name bbs.xgp.com; #修改域名
charset utf-8;
access_log /var/log/nginx/www.xb.com-access.log; #修改日志名
location /post {
rewrite (.+) http://www.xb.com/bbs$1 permanent; #这里$1为位置变量,代表/post
}
location / {
root html;
index index.html index.htm;
4.重启验证
systemctl start nginx.servic
1.添加映射
[root@localhost ~]# vim /etc/hosts 192.168.118.155 www.xgp.com
2.修改配置文件
[root@localhost ~]# vim /usr/local/nginx/conf/nginx.conf
server {
listen 80;
server_name www.xgp.com;
charset utf-8;
access_log /var/log/nginx/www.xgp.com-access.log;
if ($request_uri ~ ^/100-(100|200)-(d+).html$) {
rewrite (.*) http://www.xgpcom permanent;
}
location / {
root html;
index index.html index.htm;
}
5、基于目录下所有 php 结尾的文件跳转
1.添加映射
[root@localhost ~]# vim /etc/hosts
192.168.118.155 www.xgp.com
2.修改配置文件
[root@localhost ~]# vim /usr/local/nginx/conf/nginx.conf
server {
listen 80;
server_name www.xgp.com;
charset utf-8;
access_log /var/log/nginx/www.xgp.com-access.log;
location ~* /upload/.*.php$ {
rewrite (.*) http://www.xgp.com permanent;
}
location / {
root html;
index index.html index.htm;
}
6、基于最普通一条 url 请求的跳转
1.添加映射
[root@localhost ~]# vim /etc/hosts
192.168.118.155 www.xgp.com
2.修改配置文件
[root@localhost ~]# vim /usr/local/nginx/conf/nginx.conf
server {
listen 80;
server_name www.xgp.com;
charset utf-8;
access_log /var/log/nginx/www.xgp.com-access.log;
location ~* /admin/159.html {
rewrite (.+) http://www.xgp.com permanent;
}
location / {
root html;
index index.html index.htm;
}
总结
1、Rewrite实际场景
(1)Nginx跳转需求的实现方式
①使用rewrite进行匹配跳转
②使用if匹配全局变量后跳转
③使用location匹配再跳转
(2)rewrite放在server{}、if{}、location{}段中
location只对域名后边的除去传递参数外的字符串起作用
(3)对域名或参数字符串
①使用if全局变量匹配
②使用proxy_pass反向代理
2、优先级总结
(1)匹配某个具体文件:(location = 完整路径) > (location ^~ 完整路径) > (location ~* 完整路径) > (location ~ 完整路径) > (location 完整路径) > (location /)
(2)用目录做匹配访问某个文件:(location = 目录) > (location ^~ 目录/) > (location ~ 目录) > (location ~*目录) > (location 目录) > (location /)
(3)正则表达式:目的是为了尽量精确的匹配
(4)文件:尽量精确匹配,区分大小写精确、不区分更为精确
(5)目录:尽量精确匹配,区分大小写精确优先级更高,不区分大小写的



