rewrite regex replacement [flag]; flag=【break/last/redirect/permanent】

    regex 是正则表达式
    replacement 是替换值,新值
    flag — 是处理标志

    例:

    1. server{
    2. listen 80;
    3. server_name rewrite.mxs223.com;
    4. root html/static;
    5. location /aa.html{
    6. rewrite ^/ /a.html;
    7. }
    8. location /cc.html{
    9. rewrite ^/aa /a.html break;
    10. rewrite ^/ /b.html break;
    11. }
    12. location /bb/{
    13. rewrite ^/bb/a/ a.html redirect;
    14. rewrite ^/bb/b/ b.html permanent;
    15. }
    16. }

    http://rewrite.mxs223.com:8080/aa.html —命中 /aa.html,path=aa.html
    本来应该在html/static文件夹下查找aa.html

    1. location /aa.html{
    2. rewrite ^/ /a.html;
    3. }

    正则 ^/ 表示:总是匹配
    若rewrite正则匹配命中,则修改为path = /a.html(若不命中呢,不执行)。
    变成了在html/static文件夹下查找a.html

    e、rewrite不命中,则rewrite更换path运作不会发生
    #http://rewrite.mxs223.com:8080/cc.html

    1. location /cc.html{
    2. rewrite ^/aa /a.html break;
    3. rewrite ^/ /b.html break;
    4. }


    flag=【break/last/redirect/permanent/不写】含义。可以没有的。
    /redirect/permanent,如果rewrite命中,发页面重定向
    #http://rewrite.mxs223.com:8080/bb/a/a.html
    #http://rewrite.mxs223.com:8080/bb/b/a.html

    1. location /bb/{
    2. rewrite ^/bb/a/ a.html redirect;
    3. rewrite ^/bb/b/ b.html permanent;
    4. }

    会发生页面重定向
    301/302重定向,对浏览器的记忆有区别
    页面重定向,像servlet页面重定向一样,response返回。return;

    #break/last 内部重定向,换path值
    break标记,停止执行后续命令。for(){break}
    last标记,会引发location重新匹配。for(){continue;}
    ps : 不要轻易使用last标签

    当有flag值的时候,rewrite层面的命令会中断。last会引发location重匹配
    当没有flag值的时候,rewrite还会往下走,最后一个rewrite覆盖前面的。再引发location重匹配