zoukankan      html  css  js  c++  java
  • 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;
  • 相关阅读:
    ORACLE 查看进程数,已执行任务数, 剩余任务数,删除指定任务
    ORACLE 收集统计整个用户数据
    解决Hystrix dashboard Turbine 一直 Loading…… 及其他坑
    利用 Maven 构造 Spring Cloud 微服务架构 模块使用 spring Boot构建
    AES加解密
    JAVA POI XSSFWorkbook导出扩展名为xlsx的Excel,附带weblogic 项目导出Excel文件错误的解决方案
    JAVA 文件的上传下载
    shell启停服务脚本模板
    JAVA 设计模式之 原型模式详解
    JAVA 设计模式之 工厂模式详解
  • 原文地址:https://www.cnblogs.com/legenidongma/p/10538197.html
Copyright © 2011-2022 走看看