nginxrewrite功能如何使用(nginx开启rewrite模块)

nginxrewrite功能如何使用(nginx开启rewrite模块)

浏览次数:
信息来源: 用户投稿
更新日期: 2026-06-16
文章简介

在真正了解rewrite的使用之前,有必要全面系统学习下rewrite相关的指令和语法使用,下面来逐一了解下吧该指令用来设置一个新的变量。variable,变量名,该变量名要用"$"作为变量的第

2025阿里云双十一服务器活动

在真正了解rewrite的使用之前,有必要全面系统学习下rewrite相关的指令和语法使用,下面来逐一了解下吧

该指令用来设置一个新的变量。

  • variable,变量名,该变量名要用"$"作为变量的第一个字符,且不能与Nginx服务器预设的全局变量同名;

  • value:变量值,可以是字符串、其他变量或者变量的组合等;

  • 一个简单的案例

    }

    $args

    return200$name=$age=$args;

    }

    其他的指令有兴趣的同学可以自行尝试,下面使用这些指令完成一个需求

    自定义日志输出格式,将请求的日志输出到自定义的日志中

    具体配置如下:

    log_formatmain'$remote_addr-$request-$status-$request_uri-$http_user_agent';

    access_loglogs/access-server.logmain;

    return200$name=$age=$args=$http_user_agent;

    }

    通过这种方式,就可以实现自定义请求的相关参数输出到自定义的日志文件中

    该指令用来支持条件判断,并根据条件判断结果选择不同的Nginx配置

    condition为判定条件,可以支持以下写法:

    1)变量名称,如果变量名对应的值为空或者是0,if都判断为false,其他条件为true

    }

    location/testif{

    return200'paramsisempty';

    }

    2)使用"=“和”!="比较变量和字符串是否相等,满足为true,不满足为false

    if($request_method=POST){

    }

    注意:此处和Java不一样的是字符串不需加引号

    3)使用正则表达式对变量匹配

  • 匹配成功返回true,否则返回false;

  • 变量与正则表达式之间使用"“,”“,”!“,”!"来连接;

  • “~”代表匹配正则表达式过程中区分大小写;

  • "~*"代表匹配正则表达式过程中不区分大小写;

  • "!“和”!*"刚好和上面取相反值,如果匹配上返回false,匹配不上返回true;

  • if($http_user_agent~MSIE){

    #$http_user_agent的值中是否包含MSIE字符串,如果包含返回true

    }

    注意:正则表达式字符串一般不需要加引号,但是如果字符串中包含"}“或者是”;"等字符时,就需要把引号加上

    if($http_user_agent~Safari){

    }

    4)判断请求文件是否存在使用"-f"和"!-f"

  • 当使用"-f"时,如果请求的文件存在返回true,不存在返回false;

  • 当使用"!f"时,如果请求文件不存在,但该文件所在目录存在返回true,文件和目录都不存在返回false,如果文件存在返回false;

    if(!-f$request_filename){

    #判断请求的文件是否不存在

    if(!-f$request_filename){

    return200'<h2>notfindfile</h2>';

    }

    当访问目录下不存在的文件时,将会看到如下的异常返回

    nginxrewrite功能如何使用,nginx开启rewrite模块

    当使用"-d"时,如果请求的目录存在,if返回true,如果目录不存在则返回false;

  • 当使用"!-d"时,如果请求的目录不存在但该目录的上级目录存在则返回true,该目录和它上级目录都不存在则返回false,如果请求目录存在也返回false;

  • 使用"-e"和"!-e"来检查所请求的目录或文件是否存在

  • 当使用"-e",如果请求的目录或者文件存在时,if返回true,否则返回false;

  • 当使用"!-e",如果请求的文件和文件所在路径上的目录都不存在返回true,否则返回false;

  • 7)判断请求的文件是否可执行使用"-x"和"!-x"

  • 当使用"-x",如果请求的文件可执行,if返回true,否则返回false;

  • 当使用"!-x",如果请求文件不可执行,返回true,否则返回false;break指令

  • 该指令用于中断当前相同作用域中的其他Nginx配置。在Nginx的配置中,与该指令处于相同作用域的指令中,位于该指令之前的配置生效,位于之后的配置则无效

    }

  • text:为返回给客户端的响应体内容,支持变量的使用;

  • URL:为返回给客户端的URL地址;

    default_typeapplication/json;

    return200'{id:1,name:jike}';

    }

  • 示例1

    rewrite^/rewrite/url\w*$https://www.baidu.com;

    rewrite^/rewrite/(test)/\w*$/$1;

    rewrite^/rewrite/(hello)/\w*$/$1;

    }

    示例2

    rewrite^/rewrite/url\w*$https://www.baidu.com;

    rewrite^/rewrite/(test)/\w*$/$1last;

    rewrite^/rewrite/(hello)/\w*$/$1last;

    }

    rewrite_log指令

    该指令配置是否开启URL重写日志的输出功能

    开启后,URL重写的相关日志将以notice级别输出到error_log指令配置的日志文件汇总

    error_loglogs/error.lognotice;

    rewrite^/rewrite/url\w*$https://www.baidu.com;

    rewrite^/rewrite/(test)/\w*$/$1last;

    rewrite^/rewrite/(hello)/\w*$/$1last;

    }

    一、rewrite配置域名跳转

    有很多大型网站,在起步的时候,比如域名为:www.haoyijia.com,但是域名太长所带来的问题就是不方便记忆,于是后面改成www.hyj.com,问题是,一些老用户之前一直习惯了那个长域名,如何在老用户输入长域名的时候仍然可以跳转到新的短域名上呢?就可以考虑使用rewrite的功能;下面在本地做一下模拟。

    这里我直接在本地模拟2个域名,通过在本地的hosts文件配置下就可以了

    server_namewww.zcy.comwww.zhangcongyi.com;

    rewrite^/http://www.jd.compermanent;

    }

    重启nginx服务,浏览器访问:www.zcy.com或者www.zhangcongyi.com,观察效果

    一个完整的项目包含多个模块,比如购物网站有商品商品搜索模块、商品详情模块、购物车模块等,那么我们如何为每一个模块设置独立的域名。

    server_namesearch.hm.com;

    rewrite^(.*)http://www.hm.com/bbs$1last;

    server_nameitem.hm.com;

    rewrite^(.*)http://www.hm.com/item$1last;

    server_namecart.hm.com;

    rewrite^(.*)http://www.hm.com/cart$1last;

    }

    但是这个是非常不利于SEO搜索引擎优化的,同时客户端也不好记,使用rewrite我们可以进行如下配置:

    rewrite^/server-([0-9]+)-([0-9]+)-([0-9]+)-([0-9]+)\.html$/server/$1/$2/$3/$4/$5.htmllast;

    }

    以上就是nginx?rewrite功能如何使用的详细内容,更多请关注主机测评网其它相关文章!

    标签:
  • 为您的企业提取Web数据的7个稳定的移动代理解决方案
    « 上一篇
    返回列表
    下一篇 »

    如本文对您有帮助,就请抽根烟吧!