• Nginx Rewrite


    location  

    location 通过前缀或正则匹配用户的URL访问路径做页面跳转、访问控制和代理转发

    location  URL路径一般前缀匹配
    location = URL路径精准匹配
    location ^~ URL路径前缀匹配
    location ~ URL路径正则匹配,区分大小写
    location ~* URL路径正则匹配,不分区大小写
    location !~ URL路径正则匹配取反
    location !~* URL路径正则匹配取反,不分区大小写

    location匹配机制:

    优先级:

    精准匹配 =  >  最长前缀匹配 ^~  >  正则匹配 ~ ~* !~ !~*  >  一般前缀匹配 /XXXX  >  通用匹配 /

    在没有合适的精准匹配的情况下,先看前缀匹配的长度,取最长匹配的location(如果此最长匹配是带有^~的则不再看正则匹配;如果此最长匹配是不带有^~的则会继续再看正则匹配)

    前缀匹配看长度,最长的优先匹配;正则匹配看上下顺序,根据nginx配置文件的配置由上往下依次匹配,匹配到即停止


    #网站首页匹配
    location = / {
        root 网页根目录;
        index index.html;
    }

    #网站静态页面,通过前缀匹配或通用匹配在nginx服务器本地处理
    location ~ /static/ {
        root 目录;
    }

    location / {
        root 目录;
    }

    #网站动态页面,通过匹配不同的动态网页文件后缀转发给不同的后端应用服务器处理
    location \.php$ {
        fastcgi_pass PHP服务器地址:端口;
    }

    location \.jsp$ {
        proxy_pass TOMCAT服务器地址:端口;
    }

    rewrite作用:

      作用:对用户的URI访问路径进行地址重写,再重定向跳转访问重写后的路径 

    http://www.xy101.com/scj.jgp  ->  http://www.xy101.com/error.png

    rewrite格式

    rewrite  正则表达式  重写的地址  [标记位];
                                                          last(匹配完了继续匹配) 

                                                         break(重写完了不再匹配) 

                                                         permanent(301永久重定向,浏览器地址栏显示重写后的地址)                                          redirect(301永久重定向,浏览器地址栏显示重写后的地址)

    rewrite默认情况下只对从域名后面的根目录 / 开始到传递参数的 ? 号前面的URL路径进行重写
    rewrite 正则表达式 /新URL; http://域名/旧URL  ->  http://域名/新URL#默认只对域名后面的URL部分重写
    rewrite 正则表达式 http://新域名/新URL;http://旧域名/旧URL  ->  http://新域名/新URL; #如果需要全域名路径重写需要加上协议和域名

     http://域名/旧URL  --rewrite重写-->  http://域名/新URL -->  location匹配新URL路径跳转页面

    rewrite 正则表达式 /新URL  permanent;#重写后会修改浏览器里的地址栏再重新访问

    http://域名/旧URL  --rewrite重写-->  http://域名/新URL --> 浏览器地址栏也会改为 http://域名/新URL 再发起一次访问请求 -->  location匹配新URL路径跳转页面


    location ~ URL路径正则表达式 {
        rewrite  正则表达式  重写的地址  [标记位];
    }
        
        $request_uri
    if ($uri ~ URL路径正则表达式) {
        rewrite  正则表达式  重写的地址  [标记位];
    }

    习题
    习题:
    (1)将请求http://www.xy101.com/abc/123.html 跳转到首页http://www.xy101.com
    (2)将请求http://www.xy101.com/abc/test.jpg 跳转到http://www.xy101.com/error.png
    (3)将请求http://www.xy102.com/discuz/index.php 跳转到http://www.xy101.com/discuz/index.php ,保证原域名后面的uri路径不变
    (4)将请求http://discuz.xy101.com/index.php 的访问跳转到http://www.xy101.com/discuz/index.php ,保证原域名后面的uri路径不变
    (5)将对http://www.xy101.com 网站的所有请求跳转到自定义的维护页面或图片,本地可以访问

  • 相关阅读:
    深度学习的炼金术:转化数据为黄金的秘密
    Android Jetpack系列(一)起始篇:Jetpack 的前世今生
    C++项目-求水仙花数
    SQL语言之数据库与表的操作
    携程apollo配置中心服务端如何感知配置更新?
    Android Gradle 学习笔记(二)环境安装
    基于springboot实现游戏分享网站系统项目【项目源码+论文说明】计算机毕业设计
    批量下载浏览器网页中全部链接的方法
    docker之daemon.json文件
    ns2无线局域网隐藏节点仿真实验
  • 原文地址:https://blog.csdn.net/2301_82109773/article/details/139419720