当前位置:首页 > 技术文章 > 正文内容

Centos7学习笔记(二十一)- nginx的rewrite

ivker_lee5年前 (2021-10-27)技术文章348

一、什么是rewrite

rewirte就是实现Url地址重写,以及重定向,就是把传入的web请求重定向到其他URL的过程。

二、rewrite的使用场景

a、url地址的跳转。比如访问www.example.com/test,重定向到test.example.com网址。

b、协议的跳转,主要的就是实现http协议跳转到https页面去。

c、实现网站的伪静态。伪静态就是将网站动态页面的诸多参数,显示为一种静态页面的方式,以便于搜索引擎记录,减少URL地址暴露过多参数,提高安全性。

d、通过上述伪静态,产生较好的URL地址,利于做SEO优化

三、rewrite指令语法

Syntax:    rewrite    regex    replacement    [flag];
Default:    ---
Context:    sever    location    if

flag标记总共有四种:

last——完成该rewrite规则的执行后,停止处理后续rewrite指令集;然后查找匹配改变后URI的新location;

break——完成该rewrite规则的执行后,停止处理后续rewrite指令集,并不再重新查找;但是当前location内剩余非rewrite语句和location外的的非rewrite语句可以执行;


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

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


last和break的区别:

server {
    listen    80;
    server_name    rewrite.example.com;
    root    /code;
    
    location    ~ ^/break {
            rewrite    ^/break    /test    break;
    }
    location    ~ ^/last {
            rewrite    ^/last    /test    last;
    }
    location    /test {
            default_type    text/plain;
            return    200    'ok';
    }
}

在这个示例配置文件中,当访问rewrite.example.com/break时,当/code/test目录不存在时,报404错误,目录存在时,报403错误。

而当访问rewrite.example.com/last时,页面会直接返回“OK”字样。

原因呢,在于:

break在匹配到规则后,会去本地目录中去寻找请求的文件。寻找不到,则就会报错。

last在匹配到规则后,则会对其所在的server{...}标签重新发起请求。

那么对于上面的配置文件的理解就是:当/code/test目录下,还存在着index.html文件时,不管index.html文件的内容是什么,因为最后的location都匹配到了/test目录,最终都return回来200的状态码,页面显示的内容都会是“ok”字样(不管是访问rewrite.example.com/break还是rewrite.example.com/last)。只有当不存在"location /test”段的配置时,才会返回index.html页面的内容。


对应redirect和permanent,它们的区别是:

redirect每次请求都会询问服务器,如果服务器不可用,则会跳转失败。

permanent则是第一次请求时会询问,浏览器会记录下跳转后的地址,第二次则不再询问服务器,直接通过浏览器缓存的地址访问。除非清理浏览器缓存。

redirect的缺点是会消耗一定的资源。permanent的 缺点是当被跳转的地址再次发生变化时,跳转的访问就不再可用了。


以下全局变量,在做if判断时可用引用。

$args               #这个变量等于请求行中的参数,同$query_string;
$content_length     #请求头中的Content-length字段;
$content_type       #请求头中的Content-Type字段;
$document_root      #当前请求在root指令中指定的值,如:root /var/www/html;
$host               #请求主机头字段,否则为服务器名称;
$http_user_agent    #客户端agent信息;
$http_cookie        #客户端cookie信息;
$limit_rate         #这个变量可以限制连接速率;
$request_method     #客户端请求的动作,通常为GET或POST;
$remote_addr        #客户端的IP地址;
$remote_port        #客户端的端口;
$remote_user        #已经经过Auth Basic Module验证的用户名;
$request_filename   #当前请求的文件路径,由root或alias指令与URI请求生成;
$scheme             #HTTP方法(如http,https);
$server_protocol    #请求使用的协议,通常是HTTP/1.0或HTTP/1.1;
$server_addr        #服务器地址,在完成一次系统调用后可以确定这个值;
$server_name        #服务器名称;
$server_port        #请求到达服务器的端口号;
$request_uri        #包含请求参数的原始URI,不包含主机名,如:”/foo/bar.php?arg=baz”;
$uri                #不带请求参数的当前URI,$uri不包含主机名,如”/foo/bar.html”;
$document_uri       #与$uri相同,例:http://localhost:88/test1/test2/test.php;


关于rewrite指令,https://www.cnblogs.com/guantou1992/p/12777138.html 这篇文章讲的比较详细全面。

分享给朋友:

相关文章

Centos7学习笔记(八)-基础命令(三)

Centos7学习笔记(八)-基础命令(三)

1、rsync作为一个同步(备份,增量备份)命令,它的选项非常的多,常用的组合是avz,当然,如果需要建立备份服务,那么-n必然是用的多的参数选项。关于rsync的用法详细说明,参考网上的这篇原文链接:https://www.cnblogs.com/f-ck-need-u/p/7220009.html#blog21,文章写的非常好,有大量的通俗易懂的例子及解释。以下关于rsync参数选项的说明,就抄录自该文章。v:显示rsync过程中详细信息。可以使用"-vvvv"获取更详细...

 Centos7学习笔记(十一)- nfs服务器搭建

Centos7学习笔记(十一)- nfs服务器搭建

nfs服务本质上是通过rpc调用提供服务的,所以,其依赖rpcbind程序相关组件运行。而且,rpc服务必须先启动,nfs服务才能正常使用。以下是安装配置:1、服务端a)安装软件yum -y install nfs-utils rpcbind                                    &nb...

 Centos7学习笔记(十四)- SSH部分

Centos7学习笔记(十四)- SSH部分

1、数字签名了解ssh之前,先了解什么是数字签名?http://www.ruanyifeng.com/blog/2011/08/what_is_a_digital_signature.htmlhttp://www.youdzone.com/signature.html参看这2篇文章,通俗易懂的解释了什么是数字签名。简单的讲,就是有一个CA中心,它可以颁发“数字证书”,这个证书,可以证明其后的公钥真伪性,以便客户端正确识别。2、SSH基本原理与运用(一)以下部分,抄录于“阮一峰”博客,链接:htt...

 Centos7学习笔记(十五)- ansible初步

Centos7学习笔记(十五)- ansible初步

1、安装要求管理主机:必须不能是windows系统。类Uinx系统下,python版本为2.6或者2.7。OS X系统,需修改ulimit值才能使用ansible的多子进程。托管节点:Python版本不得低于2.4,如果Python版本低于2.4,那么需要安装python-simplejson模块。2、ansible安装redhat系需要安装epel源,fedora不用,可以直接安装yum -y install ansible(yum -y install libselinux-python,系...

 Centos7学习笔记(十六)- 正则表达式高级部分

Centos7学习笔记(十六)- 正则表达式高级部分

1、正则表达式工作流程取得正则字符串并检查正则语法。编译:将正则字符串编译成真正的正则表达式。启动正则引擎开始匹配正则引擎:逐个字符扫描字符串并与编译后的正则表达式的各个元素进行匹配。何为正则元素呢?纯字符组合,比如“abc123”,那么每一个字符都是一个正则元素[a-z]这样的样式,那么视中括号[]为一个整体作为正则元素,中括号内的内容是限定的匹配范围字符匹配的反斜线序列也是一种正则元素字符.是一个独立的正则元素,它除了不能匹配\n,其他任意字符都能匹配所有的*、?、{m}、{m,}、{m,n...

Linux学习——Shell

Linux学习——Shell

1、bash解释器csh\ksh\bash都是shell的解释器。2、关于bash的启动和配置环境按上图的理解,正常我们需要把脚本放在开机启动,需要写入的是/etc/bashrc文件或者~/.bashrc文件。另外,关于su  username和su - username的区别(bash的交互式非登录和交互式登录式)。可以参考下图...

发表评论

访客

看不清,换一张

◎欢迎参与讨论,请在这里发表您的看法和观点。