Rewrite配置
rewrite
功能就是,使用nginx提供的全局变量或自己设置的变量,结合正则表达式和标志位实现url重写以及重定向。
rewrite
只能放在server{}
,location{}
,if{}
中,并且只能对域名后边的除去传递的参数外的字符串起作用
If 空格 (条件) {设定条件进行重写}
条件的语法:
1.“=”
来判断相等,用于字符比较
2.“~”
用正则来匹配(表示区分大小写),“~*”
不区分大小写
3.“-f -d -e”
来判断是否为文件、目录、是否存在
return 指令
语法:return code;
停止处理并返回指定状态码给客户端。
if ($request_uri ~ *.sh ){
return 403
}
set指令
语法:set variable value;
定义一个变量并复制,值可以是文本、变量或者文本变量混合体
rewrite指令
语法:rewrite regex replacement [flag]{last / break/ redirect 返回临时302/ permant 返回永久302}
last
: 停止处理后续的rewrite指令集、 然后对当前重写的uri在rewrite指令集上重新查找
break
: 停止处理后续的rewrite指令集 ,并不会重新查找
综合实例
[root@localhost conf.d]# vim proxy.conf
例1:
server{
listen 8088;
server_name localhost;
location /{
rewrite ^/ http://www.baidu.com;
}
}
访问192.168.10.68:8088
的请求会重定向到http://www.baidu.com
例2:
server{
listen 8089;
server_name localhost;
location / {
rewrite '^/images/([a-z]{3})/(.*)\.(png)$' /suzao?file=$2.$3;
set $image_file $2;
set $image_type $3;
}
location /suzao {
root html;
try_files /$arg_flie /image404.html;
}
location = /image404.html{
return 404 "image not found";
}
}

如上配置对于:
/images/ttt/a.png
会重写到/suzao?file=a.png
,于是匹配到
location /suzao
;通过
try_files
获取存在的文件进行返回。最后由于文件不存在所以直接
返回404错误
rewrite匹配规则
表面看rewrite
和location
功能有点像,都能实现跳转,
主要区别在于rewrite
是在同一域名内更改获取资源的路径,
而location
是对一类路径做控制访问或反向代理,可以proxy_pass
到其他机器。
很多情况下rewrite也会写在location
里,它们的执行顺序是:
- 执行
server
块的rewrite
指令 - 执行
location
匹配 - 执行选定的
location
中的rewrite
指令 - 如果其中某步URI被重写,则重新循环执行1-3,直到找到真实存在的文件;循环超过10次,则返回500 Internal Server Error错误
网友评论