zoukankan      html  css  js  c++  java
  • Nginx 之 Rewrite 规则

    write 规则介绍

    Rewite 规则作用

    • Rewrite规则可以实现对url的重写,以及重定向

     作用场景:

    • URL访问跳转,支持开发设计,如页面跳转,兼容性支持,展示效果等
    • SEO优化
    • 维护:后台维护、流量转发等
    • 安全

    注:nginx官方文档:http://nginx.org/en/docs/http/ngx_http_rewrite_module.html

    配置语法:

    • Syntax: rewrite regex replacement [flag];
    • Default:——
    • Context:server、location、if

    简单实例

    rewrite ^(.*)$ /pages/maintain.html break;

    解释说明:

    • 会把所有的请求都重定向到 /pages/maintain.html 页面 

    常用的正则表达式

    在linux下,可以用pcretest来测试

    小示例

    rewrite index.php$ /pages/maintain.html break;
            if ($http_user_agent ~ MSIE) {
                rewrite ^(.*)$ /msie/$1 break;
            }

    解释说明

    •      --转义字符
    • ( ) --用于匹配括号之间的内容,通过$1、$2调用

     (.*) 会把所有参数的内容提取,传到/msie/下

    rewrite配置语法中的flag参数

    last 停止rewrite检测【如果没有匹配到,会继续向下匹配】

    break 停止rewrite检测【如果没有匹配到,则不再向下匹配,直接返回结果404】

    redirect 返回302临时重定向,地址栏会显示跳转后的地址

    permanent 返回301永久重定向,地址栏会显示跳转后的地址

    last与break的区别案例

     test_rewrite1.conf

    server {
        listen 80 default_server;
        server_name www.zhangbiao.com;
    
        access_log  /var/log/nginx/log/host.access.log  main;
    
        root /opt/app/code;
        location ~ ^/break {
            rewrite ^/break /test/ break;
        }
    
        location ~ ^/last {
             rewrite ^/last /test/ last;
        }
    
        location /test/ {
           default_type application/json;
           return 200 '{"status":"success"}';
        }
    }
    

    可以在终端使用 curl -vL 可以看到请求的全过程

    curl -vL www.zhangbiao.com/last/
    

      

     访问

    http://www.zhangbiao.com/test/
    

    访问

    http://www.zhangbiao.com/last/

     

     访问

    http://www.zhangbiao.com/break/
    

    可以发现访问 last 的时候新建立了一个请求 /test/ ,而访问/break/ 请求的时候 会去 /opt/app/code 下找相应的资源,没找到所以报错

    Rewrite规则_redirect和permanent区别

     test_rewrite1.conf

    server {
        listen 80 default_server;
        server_name www.zhangbiao.com;
    
        access_log  /var/log/nginx/log/host.access.log  main;
    
        root /opt/app/code;
        location ~ ^/imooc {
             rewrite ^/imooc http://www.imooc.com/ permanent;
             #rewrite ^/imooc http://www.imooc.com/ redirect;
        }
    
    }
    

     

    redirect 表示临时的重定向 ,只要后端服务是开者的。每次访问 /imoc 都会重定向到  http://www.imooc.com

    permanent 表示永久重定向,第一次访问成功后,把后端服务关闭后,访问/imoc 仍然会重定向到  http://www.imooc.com

     rewrite 规则使用场景案例

    test_rewrite.conf

    server {
        listen       80;
        server_name  www.zhangbiao.com;
        root   /opt/app/code;
    
        location / {
            rewrite ^/course-(d+)-(d+)-(d+).html$ /course/$1/$2/course_$3.html break;
            if ($http_user_agent ~* Chrome) {
                rewrite ^/nginx http://coding.imooc.com/class/121.html redirect;
            }
    
            if (!-f $request_filename) {
                rewrite ^/(.*)$ http://www.baidu.com/$1 redirect;
            }
            index  index.html index.htm;
        }
    
        error_page   500 502 503 504 404  /50x.html;
    }
    

      

     访问在 /opt/app/code/course/11/22 下存在的资源文件

    http://www.zhangbiao.com/course-11-22-33.html
    

     访问在 /opt/app/code/course/11/22 下不存在的资源文件  

    http://www.zhangbiao.com/course-11-22-5
    

    rewrite优先级规则

    • 执行server 块的rewrite 指令。将所有的网站都重定向同一个网站。
    • 执行location匹配。
    • 执行选定的location中的rewrite。

      

  • 相关阅读:
    mysql 安装
    flying-saucer-pdf使用中字符串过长换行出问题的解决办法
    杂想
    关于MATLAB实验结果求交点问题
    关于学习方向问题
    关于读取文件夹中的图片问题
    关于ROC曲线的碎碎念
    win7(64)+vs2013+opencv3.0配置的辛酸路程
    验证模式和辨识模式
    指纹识别认证
  • 原文地址:https://www.cnblogs.com/crazymagic/p/11034300.html
Copyright © 2011-2022 走看看