• Nginx rewrite规则


    Rewrite规则也称为规则重写,主要功能是实现浏览器访问HTTP URL的跳转,其正则表达式基于perl语言。重要用途如下

    a、对搜索引擎优化(Search Engine Optimization,SEO)友好,利于搜索引擎抓取网址页面;

    b、隐藏网址的URL真实地址,浏览器显示更加完美;

    c、网站变更升级,可以基于Rewrite临时重定向到其他页面;

    Nginx Rewrite 规则使用中有三个概念,分别是:Rewrite结尾标识符、Rewrite规则常用表达式、Nginx Rewrite变量,如下为详解

    (1) Nginx Rewrite 结尾标识符,用于Rewrite规则末尾,标识规则的执行属性

    last :相当于Apache里的(L)标记,表示完成rewrite匹配;
    break:本条规则匹配完成后,终止匹配,不再匹配后面的规则。  
    redirect:返回302临时重定向,浏览器地址会显示跳转后的URL地址。 
    permanent:返回301永久重定向,浏览器地址栏会显示跳转后的URL地址。  
    其中last和break用来实现URL重写时,浏览器地址栏URL地址不变。

    (2)Nginx Rewrite 规则常用表达式,主要用于匹配参数、字符串及过滤设置。

    .           匹配任何单字符;
    [0-9]     匹配字符串:0-9;
    [^0-9]   不匹配字符串:0-9;
    nihao|nisdni  可选择的字符串;
    ?           匹配0到1个字符;
    *            匹配0到多个字符;
    +            匹配1到多个字符;
    ^            字符串开始标志;
    $             字符串结束标志;
    
               转义标识符;

    (3)Nginx Rewrite 变量,常用于匹配HTTP请求头信息、浏览器主机名、URL等。

    HTTP headers:HTTP_USERHTTP_AGENT,HTTP_REFERRER,HTTP_COOKIE,HTTP_HOST,HTTP_ACCEPT;
    connection&request:REMOTE_ADDR,QUERY_STRING;
    server internals:DOCUMENT_ROOT,SERVER_PORT,SERVER_PROTOCOL;
    system stuff;TIME_YEAR,TIME_MON,TIME_DAY;
    HTTP_USER_AGENT             用户使用的代理,例如浏览器;
    HTTP_REFERER                告知服务器,从哪个页面来访问的;
    HTTP_COOKIE                客户端缓存,主要用于存储用户名和密码等信息;
    HTTP_HOST                    匹配服务器ServerName域名;
    HTTP_ACCEPT                客户端的浏览器支持的MIME类型;    
    REMOTE_ADDR                客户端的IP地址
    QUERY_STRING                URL中访问的字符串;
    DOCUMENT_ROOT            服务器发布目录;
    SERVER_PORT                服务器端口;
    SERVER_PROTOCOL            服务器端协议;
    TIME_YEAR                    年;
    TIME_MON                    月;
    TIME_DAY                    日

    (4) Nginx Rewrite 以下配置均配置在nginx.conf或者vhosts.conf中;

    1.将hello.net 跳转至www.hello.net
    if ( $host='hell.net' ) {
                rewrite ^/(.*)$ http://www.hello.net/$1 permanent;
    }
    2.访问www.hello.net 跳转www.baidu.com/new.index.html.
    rewrite ^/$ http://www.baidu.com/new.index.html permanent;
    3.访问/hello/test/跳转至/newindex.html,浏览器地址不变。
    rewrite ^/hello/test/$  /newindex.html  last;
    4.多域名跳转到www.baidu.com.
    if($host='www.baidu.com'){
    rewrite ^/(.*)$ http://www.baidu.com/$1 permanent;
    }
    5.访问文件和目录不存在跳转至index.php
    if ( !-e $request_filename ) {
     rewrite ^/(.*)$ /index.php last;
    }
    6.目录对换/xxx/1234  /xxx?id=1234
    rewrite ^/(.+)(d+) $1?id=$2 last;
    7.判断浏览器User Agent跳转。
    if ( $http_user_agent ~ MSIE ) {
    rewrite ^/(.*)$/ie/$1 break;
    }
    8.禁止访问以.sh,.flv,.mp3为文件后缀名的文件。
    location ~ .*.(sh|flv|mp3)$ {
    return  403;
    }
    9.将移动用户访问跳转至移动端。
    if ( $http_user_agent ~* "(Android)|(iphone)|(Mobile)|(WAP)|(UCWEB)") {
    rewrite ^/$ http://m.baidu.com/ permanent;
    }
    10.匹配URL访问字符串跳转。
    if ( $args~*tid=13 ) {
    return 404;
    }
    11.访问/10690/hello/546 跳转至/index.php?tid/10690/items=123,[0-9]表示任意一个数字,+表示多个,(.+)表示任意多个字符。
    rewrite ^/([0-9]+)/hello/(.+)$ /index.php?tid/$1/items=$2 last;
  • 相关阅读:
    kubernetes---Init-Container
    kubernetes---affinity--taint
    kubernetes---pod调度
    kubernetes---项目部署
    StatefulSet
    kubernetes---存储--PV--PVC
    pod-pod控制器-service-ingress
    jenkins
    django中的验证码
    django中的缓存
  • 原文地址:https://www.cnblogs.com/legenidongma/p/10538197.html
Copyright © 2020-2023  润新知