rewrite功能
根据指定正则表达式匹配规则,重写URL
语法结构
语法 : rewrite regex replacement [flag]
默认值 : -
上下文 ; server 、 location 、 if
示例
rewrite /images/(.*\.jpg)$ /pic/$1; //将/images下的*.jpg图片重写到/pic目录下的图片
这个$1
可以理解为 www.xxx.com/images/1.jpg
把这个1.jpg
参数传递到pic/目录下
,查看pic/
下是否有1.jpg
rewrite中的flag
flag可选值以及含义
这里重点看last
、break
的可选值。
场景示例
场景1
server {
location /search {
rewrite ^/(.*) http://www.baidu.com redirect; //访问xxx.com/search 任意字符 会临时重定向到百度上。
}
}
场景2
流程顺序比较复杂,多看看。
访问xxx.com/images
重写到/pic
下,/pic
下又重写到/photos
下。
写入测试数据
cd '网站目录'
mkdir imgages
mkdir pic
mkdir photos
echo "我在images目录下" > images/index.html
echo "我在pic目录下" > pic/index.html
echo "我在photos目录下" > photos/index.html
server {
location /images {
rewrite /images/(.*)$ /pic/$1;
}
location /pic {
rewrite /pic/(.*) /photos/$1
}
location /photos {
}
}
想想最后是会访问到那个?
答: 最后是会访问到photos
下。一层一层匹配到最后的photos目录下。
(再次说明 这个$1
就是一个参数变量,访问xxx.com/images/index.html
),实际上这个index.html
就是变量。最后重写到/photos/index.html
,
场景3
还是拿上述举例。如果在/pic
的location段后,增加break
的flag。会重定向哪里?
server {
location /images {
rewrite /images/(.*)$ /pic/$1 break; //增加break的flag,终止需要匹配规则
}
location /pic {
rewrite /pic/(.*) /photos/$1;
}
location /photos {
}
}
访问xxx.com/images
匹配到/pic
,并且终止循环匹配去找。而直接去找pic
下的文件,如果有就返回。就中止继续找了。
场景4
还是拿场景2举例。如果在/pic
的location段后,增加last
的flag。会重定向哪里?
server {
location /images {
rewrite /images/(.*)$ /pic/$1 last; //增加last的flag,重新在server段找
}
location /pic {
rewrite /pic/(.*) /photos/$1;
}
location /photos {
}
}
访问xxx.com/images
,匹配到pic
,加了last
会在server段找是否有location /pic
的内容,有就匹配。
匹配到了/pic
又重写到photos
,最后还是访问photos
目录下。
评论 (0)