当前位置 > it书童 > nginx > 正文
推荐小册
java高效编程
怎样更高效地用 java 编程

juc并发工具库
java并发编程工具库

设计模式
设计模式

jvm调优
jvm调优

rabbitmq实战
rabbitmq实战

redis实战
redis实战

Keepavlied高可用集群
Keepavlied高可用集群

nginx入门到实战
nginx入门到实战

java调试
java调试中遇到的各种坑

java输入输出流
java输入输出流

nginx 重写规则

nginx it书童 2019-10-05 11:10:12 0赞 0踩 1294阅读 0评论

概述

url重写的作用

  • 业务需求,对一些特殊的url进行美化或者跳转

  • seo优化

  • 安全 动态url伪装成静态html

语法:rewrite regex replacement [flag]

如:rewrite ^(.*)$ /update.html break

flag 说明
last 停止rewrite检测,再次发出请求
break 停止rewrite检测,不会再次发出请求
redirect 302临时重定向,显示跳转后的地址
permanent 301永久重定向,显示跳转后的地址

last 与 break

nginx 配置:

server {
    listen 80;
    server_name local.test;
    root /Users/airmb/code/test;
    location ~ ^/break {
        rewrite ^/break /test/ break;
    }

    location ~ ^/last {
        rewrite ^/last /test/ last;
    }
    
    location /test/ {
        default_type application/json;
        return 200 '{"status": "success"}';
    }
}

查看以下三个请求的页面返回结果:

http://local.test/test/

http://local.test/break

http://local.test/last

last匹配到location后,会新建一个请求,以新的请求去访问服务器

last 与 redirect

location ~ ^/last {
    rewrite ^/last /test/ last;
    # rewrite ^/last /test/ redirect;
}

location ~ ^/last {
    rewrite ^/last /test/ last;
    # rewrite ^/last /test/ redirect;
}

permanent 与 redirect

location ~ ^/github {
    rewrite ^/github http://www.github.com/ redirect;
}

location ~ ^/zhihu {
    rewrite ^/zhihu http://www.zhihu.com/ permanent;
}

首先,访问 http://local.test/github 与 http://local.test/zhihu 可看到这两个url都能跳转

然后关闭nginx

$ sudo nginx -s stop

结果:http://local.test/github 无法访问,而 http://local.test/zhihu 依然能跳转。因为前者是临时重定向,每次请求都会经由服务器转发,而后者是永久重定向,除非除非客户端浏览器缓存,不然只需访问一次,以后就不需要再经由服务器,而是直接跳转

关于我
一个文科出身的程序员,追求做个有趣的人,传播有价值的知识,微信公众号主要分享读书思考心得,不会有代码类文章,非程序员的同学请放心订阅
转载须注明出处:https://www.itshutong.com/articles/269/nginx-rewrite-rules