1.什么是Nginx的Rewrite规则?
Rewrite主要的功能就是实现URL的重写,Nginx的Rewrite规则采用PCRE(Perl
Compatible Regular Expressions)Perl兼容正则表达式的语法进行规则匹配,如果

您需要Nginx的Rewrite功能,在编译Nginx之前,须要编译安装PCRE库.
通过Rewrite规则,可以实现规范的URL,根据变量来做URL转向及选择配置.

(1)一些使用MVC框架的程序只有一个入口,可以通过Rewrite来实现.
(2)一些动态URL地址须要伪装成静态HTML,便于搜索引擎抓取,也需要Rewrite来处理
(3)一些由于目录结构,域名变化的旧URL,须要跳转到新的URL上,可以通过Rewrite来

处理.

2.Nginx Rewrite规则相关指令
if , rewrite , set , return , break
(1)break,完成当前的规则集,不再处理rewrite指令.
(2)if

语法: if(condition){...}
用于检查一个条件是否符合,如果条件符合,则执行大括号内的语句.if指令不支持嵌

套,不支持多个条件&&和||处理.
以下信息可以被指定为条件:
1)变量名,其中错误的值包括:空字符串"",或者任何以0开始的字符串.
2)变量比较可以使用=和!=运算符
3)"~"符号表示区分大小写字母的匹配.
4)"~*"符号表示不区分大小写字母的匹配.如firefox和FireFox是匹配的.
5)"!~"和"!~*"符号的作用刚好和"~","!~"相反,表示不匹配.
6)"-f"和"!-f"用来判断文件是否存在.
7)"-d"和"!-d"用来判断目录是否存在.
8)"-e"和"!-e"用来判断文件或目录是否存在.
9)"-x"和"!-x"用来判断文件是否可执行.
(3)return 语法:return code
该指令用于结束规则的执行并返回状态码给客户端.状态码可以使用这些

值:204,400,402-406,408,410,413,416,及500-504.非标准状态码,444将以不发送

任何Header头的方式结束连接.
403Forbidden.服务器已经理解请求,但是拒绝执行它.
404Not Found.请求失败,请求所希望得到的资源未在服务器上发现.404这个状态码

被广泛应用于当服务器不想揭示为何请求被拒绝,或者没有其他适合的响应可用的情

况下.
500Internal Server Error.服务器遇到一个未曾预料的状况,导致它无法完成对请

求的处理.一般来说,这个问题都会在服务器的程序码出错时出现.
502Bad Gateway.作为网关或代理工作的服务器尝试执行请求时,从上游服务器接收

到无效的响应.
503Service Unavailable.由于临时的服务器维护或过载,服务器当前无法处理请求.

这个状况是临时的,并且将在一段时间以后恢复.503状态码的存在并不意味着服务器

在过载的时候必须使用它.某些服务器只不过是希望拒绝客户端的连接.
504 Gateway Timeout作为网关或代理工作的服务器尝试执行请求时,未能及时从上

游服务器(URI标识出的服务器,例如HTTP,FTP,LDAP)或辅助服务器(例如DNS)收到响

应.
(4)rewrite指令.语法:rewrite regex replacement flag .该指令根据表达式来重

定向URI,或者修改字符串.指令根据配置文件中的顺序来执行.注意重写表达式只对

相对路径有效.如果想配对主机名,应该使用If语句.
rewrite指令的最后一项参数为flag标记,支持的flag标记有:
last——相当于Apache里的[L]标记,表示完成rewrite.
break——本条规则匹配完成后,终止匹配,不再匹配后面的规则.
redirect——返回302临时重定向,浏览器地址栏会显示跳转后的URL地址.
permanent——返回301永久重定向,浏览器地址栏会显示跳转后的URL地址.
在以上标记中,last和break用来实现URI重写,浏览器地址栏的URL地址不变,但在服

务器端访问的路径发生了变化.redirect和permanent用来实现URL跳转,浏览器地址

栏会显示跳转后的URL地址.
1)一般在根location中(即location/{...})或直接在server标签中编写rewrite规则

.推荐使用last标记,在非根location中(location/cms/{...}),则使用break标记.
如:
rewrite ^(/download/.*)/media/(.*)\..*$ $1/mp3/$2.mp3 last ;
rewrite ^(/download/.*)/audio/(.*)\..*$ $1/mp3/$2.ra last ;
return 403 ;

location /download/{
  rewrite ^(/download/.*)/media/(.*)\..*$ $1/mp3/$2.mp3 break ;
  rewrite ^(/download/.*)/audio/(.*)\..*$ $1/mp3/$2.ra break ;
  return 403 ;
}
2)如果被替换的URI中含有参数(即类似/app/test.php?id=5之类的URI),默认情况

下参数会被自动附加到替换串上,你可以通过在替换串的末尾加上?标记来解决这一

问题.不加?标记和加上?标记的URL跳转区别:

rewrite ^/test(.*)$ http://www.yourdomain.com/home permanent ;
访问http://www.yourdomain.com/test?id=5 经过301跳转后的URL地址为

http://www.yourdomain.com/home?id=5

rewrite ^/test(.*)$ http://www.yourdomain.com/home? permanent ;
访问http://www.yourdomain.com/test?id=5 经过301跳转后的URL地址为

http://www.yourdomain.com/home

(5)set指令.语法: set variable value .该指令用于定义一个变量,并给变量赋值.

变量的值可以为文本,变量及文本变量的联合.例如: set $varname 'hello' ;u

(6)uninitialized_variable_warn 指令. 语法uninitialized_variable_warn on|

off 该指令用于开启或关闭记录关于未初始化变量的警告信息,默认值为开启.

(7)Nginx Rewrite可以用到的全局变量.
在if , location , rewrite 指令中,可以使用以下局部变量.
$args , $content_length , $content_type ,$document_root , $document_uri,

$host , $http_user_agent , $http_cookie , $limit_rate ,

$request_body_file , $request_method , $remote_addr , $remote_port ,

$remote_user , $remote_filename , $request_uri , $query_string , $scheme

,$server_protocol , $server_addr , $server_name , $server_port , $uri

转载于:https://www.cnblogs.com/timelesszhuang/p/4639158.html

nginx——rewrite模块相关推荐

  1. nginx rewrite模块

    return 从0.8.42版本开始, return 语句可以指定重定向 url (状态码可以为如下几种 301,302,303,307), 也可以为其他状态码指定响应的文本内容,并且重定向的url和 ...

  2. nginx 的 rewrite 模块

    ngxhttprewrite_module 模块用来使用正则表达式(PCRE)改变请求的 URI,返回重定向,并有条件地选择配置. 指令执行顺序 首先顺序执行 server 块中的 rewrite 模 ...

  3. Nginx的rewrite模块疑问排查

    标题索引 追溯原因 实验分析 原理总结 追踪原因 最近心态"一步一印,有印为证",在Nginx的rewrite模块在工作过程中,客户端发起包到服务器解包整体过程浏览器做了什么?服务 ...

  4. centos 7.6——Nginx中rewrite模块应用(location)——基于域名的跳转等

    centos 7.6--Nginx中rewrite模块应用(location)--基于域名的跳转等 文章目录 centos 7.6--Nginx中rewrite模块应用(location)--基于域名 ...

  5. nginx(三十二)rewrite模块

    一    官方rewrite模块 1)这个模块作用于'SERVER_REWRITE'和'REWRITE'阶段,前者的优先级'较高'2)根据rewrite模块出现在'server{}'还是'locati ...

  6. NGINX的rewrite模块

    NGINX的rewrite模块 4.18 Rewrite 模块 Nginx服务器利用 ngx_http_rewrite_module 模块解析和处理rewrite请求,此功能依靠 PCRE(perlc ...

  7. Nginx极客时间:rewrite阶段的rewrite模块:return指令

    1. rewrite模块的return指令: return指令 是由 rewrite模块提供的 一个非常常用的指令,可以在 SERVER_REWRITE 和 REWRITE 这两个阶段生效, 它可以帮 ...

  8. nginx rewrite重写与防盗链配置

    nginx rewrite重写规则与防盗链配置方法 时间:2016-02-04 15:16:58来源:网络 导读:nginx rewrite重写规则与防盗链配置方法,rewrite规则格式中flag标 ...

  9. Nginx的模块与工作原理

    Nginx由内核和模块组成,其中,内核的设计非常微小和简洁,完成的工作也非常简单,仅仅通过查找配置文件将客户端请求映射到一个location block(location是Nginx配置中的一个指令, ...

  10. nginx rewrite if指令剖析

    0. 前言 nginx的if功能确实是弱得可以,严重影响了生产效率.故此,先提出严正抗议! 1. if指令配置的实现 对于这个功能奇弱的if指令,nginx实现得还特别复杂.下面将对其实现进行剖析. ...

最新文章

  1. 大型网站架构系列:分布式消息队列
  2. eclipsse 关闭 方法提示_MacOS10.15.7关闭AppStore右上角小红标提示及系统更新右上角小红标提示的方法...
  3. python带格式复制excel样式和内容_使用python的xlrd,xlwt和xlutils.copy保留样式
  4. 【MFC】Windows窗口样式
  5. sklearn自学指南(part43)--数据加载工具
  6. C# GTS四轴运动控制器实例(固高科技步进电机不带编码器) -V1
  7. C++ 语法都不会怎么写代码? 03
  8. linux无法安装php-fpm,Linux下的php-fpm相关问题解决
  9. 蓝桥杯2013c++真题:颠倒的价牌
  10. nvm 下载node 下载不下来_挑战不可能最新版手游下载_挑战不可能最新版安卓版下载...
  11. 实战PyQt5: 137-QChart图表之散点图
  12. 前端vue实现PDF预览
  13. 对10G/40Gphy中auto-negotiation功能调试
  14. 国产银河数学式电子计算机是属于,《世界上公认的第一台电子计算机.doc
  15. Android Studio连接海马玩模拟器
  16. 人工智能研究中心快递柜——代码分析十一
  17. 高速电路设计实践学习笔记(一)电阻 电容 电感 磁珠
  18. 高企认定人员及研发费要求?
  19. 输入法遮挡EditText输入框的问题
  20. 湖南广电台长吕焕斌:湖南电视台的新媒体发展战略

热门文章

  1. 专题三、ArrayList遍历方式以及效率比较
  2. 使用Leopard MVC
  3. android http 本地 web服务(tomcat)
  4. js 动态生成HTML,并加载事件遇到的问题
  5. Java多线程看着一篇足够了!
  6. RedisJson 横空出世,性能碾压ElasticSearch 和Mongo!
  7. 别再用 Visio 了!试试这个比它快 10 倍的画图工具不香吗?
  8. 产品经理给程序员发了一个“在吗”
  9. Java 对象不使用时,为什么要赋值为 null?
  10. 基于SpringCloud开发的分布式系统,遇到爬虫、接口盗刷怎么办?