zoukankan      html  css  js  c++  java
  • rewirte 规则

    Nginx Rewrite  

      Rewirte 规则也称为规则重写,主要功能是实现浏览器访问 HTTP URL 的跳转,其正则

    表达式是基于 Perl 语言。通常而言,几乎所有的 WEB 服务器均可以支持 URL 重写。Rewrite

    URL 规则重写的用途:

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

      隐藏网站 URL 真实地址,浏览器显示更加美观;

      网站变更升级,可以基于 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 规则常用表达式,主要用于匹配参数、字符串及过滤设置。

     

    .

     

    匹配任何单字符;

    [word]

     

    匹配字符串:word;

    [^word]

     

    不匹配字符串:word;

    jfedu|jfteach

    可选择的字符串:jfedu|jfteach;

    ?

     

    匹配 0 到 1 个字符;

    *

     

    匹配 0 到多个字符;

    +

     

    匹配 1 到多个字符;

    ^

     

    字符串开始标志;

    $

     

    字符串结束标志;

    \n

     

    转义符标志。

     

     

    (3)

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

     

    HTTP headers:HTTP_USER_AGENT, HTTP_REFERER, 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  中,企业中常用的

     

    Nginx Rewrite 案例如下:

    1. 将 baidu.com 跳转至 ww.baidu.com。

    if ($host = 'jfedu.net' ) {

    rewrite ^/(.*)$ ww.baidu.com permanent;

    }

     

    1. 访问 www.baidu.com跳转 new_index.html。

     

    rewrite ^/$ http://www.baidu.com/new_index.html permanent;

     

       2.访问/baidu/test01/跳转至/newindex.html,浏览器地址不变。

     

    rewrite ^/test01/$  http://www.baidu/newindex.htmil last;

     

       3.多域名跳转到 www.baidu.com。

     

    if ($host != ‘www.baidu.com’ ) {

    rewrite ^/(.*)$ http://www.baidu.com/$1 permanent 

    }

     

      4. 访问文件和目录不存在跳转至 index.php。

     

    if ( !-e $request_filename ) 

    {

    rewrite ^/(.*)$ /index.php last;

    }

       

      5.目录对换 /xxxx/123456  ====>  /xxxx?id=123456。

     

    rewrite ^/(.+)/(\d+) /$1?id=$2 last;

     

      6.判断浏览器 User Agent 跳转。

     

    if( $http_user_agent ~ MSIE)

    {

    rewrite ^(.*)$ /ie/$1 break;

    }

     

      7.禁止访问以.sh,.flv,.mp3 为文件后缀名的文件。

     

    location ~ .*\.(sh|flv|mp3)$ 

    return 403;

    }

     

        9.将移动用户访问跳转至移动端。

     

    if ( $http_user_agent ~* "(Android)|(iPhone)|(Mobile)|(WAP)|(UCWEB)" )

    {

    rewrite ^/$ http://m.baidu.net/ permanent;

    }

     

      10. 匹配 URL 访问字符串跳转。

     

    if ($args ~* tid=13) { return 404;

    }

     

      11.访问/10690/baidu/123 跳转至/index.php?tid/10690/items=123,[0-9]表示任意一个数字,+ 表示多个,(.+)表示任何多个字符。

    rewrite ^/([0-9]+)/baidu/(.+)$ /index.php?tid/$1/items=$2 last;

  • 相关阅读:
    JUnitBeforeClass、AfterClass、Before、After示例
    4 jquery中dom操作和事件的实例学习访yahoo邮箱登录框的提示效果
    2 jquery 强大的选择器
    3 jquery对象和dom对象的相互转换
    开博第一篇
    转载notepad++ zendcoding使用
    轻描淡写的日子
    测试
    BPMN中的任务(task)介绍
    Google App Engine正式对Java进行支持
  • 原文地址:https://www.cnblogs.com/linxizhifeng/p/6986318.html
Copyright © 2011-2022 走看看