nginx 08-Nginx的rewrite规则

nginx的rewrite作用

  • 可通过rewrite规则实现url重写以及重定向
  • 使用场景如下:
    1. URL访问跳转,支持开发设计
    2. 页面跳转、兼容性支持、展示效果等
    3. SEO优化
    4. 维护:后台维护、流量转发等
    5. 安全
  • 配置语法
rewrite regex replacement [flag];
(server、location、if)

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

nginx之正则表达式

.	    --匹配除换行符以外的任意字符
?	    --重复0次或1次
+	    --重复1次或更多次
*	    --最少链接数,那个机器连接数少就分发
\d	    --匹配数字
^	    --匹配字符串的开始
$	    --匹配字符串的介绍
{n}	    --重复n次
{n,}	--重复n次或更多次
[c]	    --匹配单个字符c
[a-z]	--匹配a-z小写字母的任意一个
\	    --转义字符
        rewrite index\.php$ /pages/maintain.html break;
( )	    --用于匹配括号之间的内容,通过$1、$2调用
        if ($http_user_agent ~ MSIE) {
            rewrite ^(.*)$ /msie/$1 break;
        }

nginx之flag描述

last		--停止rewrite检测,重新发起新的请求
break		--停止rewrite检测,根据本地路径去查找静态页面
redirect	--返回302临时重定向,地址栏会显示跳转后的地址
permanent	--返回301永久重定向,地址栏会显示跳转后的地址

last与break的区别案例

server {
    listen 80 default_server;
    server_name location;

    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"}';
    }
}

redirect与permanent的区别案例

server {
    listen 80 default_server;
    server_name location;

    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;
         #rewrite ^/last /test/ redirect;
    }    

    location ~ ^/baidu {
         rewrite ^/baidu http://www.baidu.com/ permanent;
         #rewrite ^/baidu http://www.baidu.com/ redirect;
    }    
 
    location /test/ {
       default_type application/json;
       return 200 '{"status":"success"}';
    }
}

正则匹配规矩案例

server {
    listen 80;
    server_name location;
    location / {
        rewrite ^/course-(\d+)-(\d+)-(\d+)\.html$ /course/$1/$2/course_$3.html break;
        if ($http_user_agent ~* Chrome) {
            rewrite ^/nginx http://192.168.10.10/class/121.html redirect;
        } 

        if (!-f $request_filename) {
            rewrite ^/(.*)$ http://www.baidu.com/$1 redirect;
        }
        index  index.html index.htm;
    }
}

rewrite规则优先级

  • 执行server块的rewrite指令
  • 执行location匹配
  • 执行选定的location中的rewrite
posted @ 2019-04-09 15:49  瞎搞的富哥  阅读(267)  评论(0编辑  收藏  举报