美文网首页
nginx下rewrite的使用

nginx下rewrite的使用

作者: 有梦想的虫子_2018 | 来源:发表于2020-10-26 10:29 被阅读0次

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";
        }
}
image.png
如上配置对于:
/images/ttt/a.png 会重写到/suzao?file=a.png,
于是匹配到location /suzao ;
通过try_files获取存在的文件进行返回。
最后由于文件不存在所以直接
返回404错误
rewrite匹配规则

表面看rewritelocation功能有点像,都能实现跳转,
主要区别在于rewrite是在同一域名内更改获取资源的路径,
location是对一类路径做控制访问或反向代理,可以proxy_pass到其他机器。
很多情况下rewrite也会写在location里,它们的执行顺序是:

  • 执行server块的rewrite指令
  • 执行location匹配
  • 执行选定的location中的rewrite指令
  • 如果其中某步URI被重写,则重新循环执行1-3,直到找到真实存在的文件;循环超过10次,则返回500 Internal Server Error错误

相关文章

网友评论

      本文标题:nginx下rewrite的使用

      本文链接:https://www.haomeiwen.com/subject/tpmvmktx.html