zoukankan      html  css  js  c++  java
  • nginx rewrite重写规则集合

    本文根据网络搜索整理,不是原创

    一.正则表达式匹配,其中:
    ~       为区分大小写匹配
    ~*      为不区分大小写匹配
    !~和!~*  分别为区分大小写不匹配及不区分大小写不匹配
    
    .      匹配除换行符以外的任意字符
    w     匹配字母或数字或下划线或汉字
    s     匹配任意的空白符
    d     匹配数字
         匹配单词的开始或结束
    ^      匹配字符串的开始
    $      匹配字符串的结束
    
    *         重复零次或更多次
    +         重复一次或更多次
    ?         重复零次或一次
    {n}       重复n次
    {n,}      重复n次或更多次
    {n,m}     重复n到m次
    *?        复任意次,但尽可能少重复
    +?        重复1次或更多次,但尽可能少重复
    ??        重复0次或1次,但尽可能少重复
    {n,m}?    重复n到m次,但尽可能少重复
    {n,}?     重复n次以上,但尽可能少重复
    
    W        匹配任意不是字母,数字,下划线,汉字的字符
    S        匹配任意不是空白符的字符
    D        匹配任意非数字的字符
    B        匹配不是单词开头或结束的位置
    [^x]      匹配除了x以外的任意字符
    [^aeiou]  匹配除了aeiou这几个字母以外的任意字符    
    
    (exp)         匹配exp,并捕获文本到自动命名的组里
    (?<name>exp)  匹配exp,并捕获文本到名称为name的组里,也可以写成(?'name'exp)
    (?:exp)       匹配exp,不捕获匹配的文本,也不给此分组分配组号    
    (?=exp)       匹配exp前面的位置
    (?<=exp)      匹配exp后面的位置
    (?!exp)       匹配后面跟的不是exp的位置
    (?<!exp)      匹配前面不是exp的位置
    (?#comment)   注释分组不对正则表达式的处理产生任何影响
    
    二.文件及目录匹配,其中:
    -f和!-f用来判断是否存在文件
    -d和!-d用来判断是否存在目录
    -e和!-e用来判断是否存在文件或目录
    -x和!-x用来判断文件是否可执行
    
    三.rewrite指令的最后一项参数为flag标记,flag标记有:
    1.last    相当于apache里面的[L]标记,表示rewrite。
    2.break本条规则匹配完成后,终止匹配,不再匹配后面的规则。
    3.redirect  返回302临时重定向,浏览器地址会显示跳转后的URL地址。
    4.permanent  返回301永久重定向,浏览器地址会显示跳转后的URL地址。
    
    四. 语法规则: 【= | ^~ | ~ | ~* | / | /uri 】
     location = /uri                = 表示精确匹配,只有完全匹配上才能生效,若找到,停止搜索; 
     location ^~ /uri               ^~开头表示对URL路径进行前缀匹配,并且在正则匹配之前,若找到,停止搜索; 
     location ~ pattern             ~开头表示区分大小写的正则匹配,按配置文件顺序匹配; 
     location ~* pattern            ~*开头表示不区分大小写的正则匹配,按配置文件顺序匹配; 
     location /uri                  不带任何修饰符,表示前缀匹配,在正则匹配之后; 
     location /                     通用匹配,任何未匹配到其他location的请求都会匹配到,相当于default; 
    
    五. 多个location配置的情况匹配顺序为
    首先精确匹配 = ;
    其次前缀匹配 ^~;
    其次是按照配置文件中的正则匹配; 
    然后匹配不带任何修饰符的前缀匹配; 
    最后交给/通用匹配;

     nginx全局变量

    arg_PARAMETER        #这个变量包含GET请求中,如果有变量PARAMETER时的值。
    args                 #这个变量等于请求行中(GET请求)的参数,如:foo=123&bar=blahblah;
    binary_remote_addr   #二进制的客户地址。
    body_bytes_sent      #响应时送出的body字节数数量。即使连接中断,这个数据也是精确的。
    content_length       #请求头中的Content-length字段。
    content_type         #请求头中的Content-Type字段。
    cookie_COOKIE        #cookie COOKIE变量的值
    document_root        #当前请求在root指令中指定的值。
    document_uri         #与uri相同。
    host                 #请求主机头字段,否则为服务器名称。
    hostname             #Set to themachine’s hostname as returned by gethostname
    http_HEADER
    is_args              #如果有args参数,这个变量等于”?”,否则等于”",空值。
    http_user_agent      #客户端agent信息
    http_cookie          #客户端cookie信息
    limit_rate           #这个变量可以限制连接速率。
    query_string         #与args相同。
    request_body_file    #客户端请求主体信息的临时文件名。
    request_method       #客户端请求的动作,通常为GET或POST。
    remote_addr          #客户端的IP地址。
    remote_port          #客户端的端口。
    remote_user          #已经经过Auth Basic Module验证的用户名。
    request_completion   #如果请求结束,设置为OK. 当请求未结束或如果该请求不是请求链串的最后一个时,为空(Empty)。
    request_method       #GET或POST
    request_filename     #当前请求的文件路径,由root或alias指令与URI请求生成。
    request_uri          #包含请求参数的原始URI,不包含主机名,如:”/foo/bar.php?arg=baz”。不能修改。
    scheme               #HTTP方法(如http,https)。
    server_protocol      #请求使用的协议,通常是HTTP/1.0或HTTP/1.1。
    server_addr          #服务器地址,在完成一次系统调用后可以确定这个值。
    server_name          #服务器名称。
    server_port          #请求到达服务器的端口号。

    nginx中rewrite 一些简单重写

    禁止.mp3.sh访问
    location ~ .*.(mp3|sh)$
    {
    return 403;
    }

    目录/hometest/ 重定向到 /www/temp/
    rewrite ^/([0-9a-z]+)test/$ /www/$1 permanent;
    例如:
    访问 ceshitest.com/uuu/
    结果重定向到 ceshitest.com/www/uuu/

    文件/ceshi-123-456-789.html 重定向到 /ceshi/123/456/789.html
    rewrite ^/ceshi-([0-9]+)-([0-9]+)-([0-9]+).html$ /ceshi/$1/$2/ceshitest_$3.html permanent;

    根据表达式来重定向URI及修改字符串,只对相对路径有效;如果想配对主机名,需使用if语句,示例如下:
    if( $host ~* www.(.*).(.*)$)
    {
    set $test1 $1;
    set $test2 $2;
    rewrite ^(.*)$ http://t=$test1&m=$test2 permanent;
    }

    例子:访问www.baidu.com
    结果:浏览器会访问 http://baiducom/ ($1代表第1个括号内容$2代表第2括号内容)

     
  • 相关阅读:
    vnc安装
    centos下安装图形界面
    granfana telegraf influx安装与使用
    jenkins安装与使用
    yum使用手册
    Python模块--并发相关threading、multiprocessing、Queue、gevent
    Python模块--logging
    Python模块--psutil
    python模块--Beautifulsoup
    Python模块--Pexpect
  • 原文地址:https://www.cnblogs.com/weilaibuxiangshuo/p/11466879.html
Copyright © 2011-2022 走看看