nginx——rewrite模块
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指令不支持嵌
套,不支持多个条件&&和||处理.
以下信息可以被指定为条件:
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模块相关推荐
- nginx rewrite模块
return 从0.8.42版本开始, return 语句可以指定重定向 url (状态码可以为如下几种 301,302,303,307), 也可以为其他状态码指定响应的文本内容,并且重定向的url和 ...
- nginx 的 rewrite 模块
ngxhttprewrite_module 模块用来使用正则表达式(PCRE)改变请求的 URI,返回重定向,并有条件地选择配置. 指令执行顺序 首先顺序执行 server 块中的 rewrite 模 ...
- Nginx的rewrite模块疑问排查
标题索引 追溯原因 实验分析 原理总结 追踪原因 最近心态"一步一印,有印为证",在Nginx的rewrite模块在工作过程中,客户端发起包到服务器解包整体过程浏览器做了什么?服务 ...
- centos 7.6——Nginx中rewrite模块应用(location)——基于域名的跳转等
centos 7.6--Nginx中rewrite模块应用(location)--基于域名的跳转等 文章目录 centos 7.6--Nginx中rewrite模块应用(location)--基于域名 ...
- nginx(三十二)rewrite模块
一 官方rewrite模块 1)这个模块作用于'SERVER_REWRITE'和'REWRITE'阶段,前者的优先级'较高'2)根据rewrite模块出现在'server{}'还是'locati ...
- NGINX的rewrite模块
NGINX的rewrite模块 4.18 Rewrite 模块 Nginx服务器利用 ngx_http_rewrite_module 模块解析和处理rewrite请求,此功能依靠 PCRE(perlc ...
- Nginx极客时间:rewrite阶段的rewrite模块:return指令
1. rewrite模块的return指令: return指令 是由 rewrite模块提供的 一个非常常用的指令,可以在 SERVER_REWRITE 和 REWRITE 这两个阶段生效, 它可以帮 ...
- nginx rewrite重写与防盗链配置
nginx rewrite重写规则与防盗链配置方法 时间:2016-02-04 15:16:58来源:网络 导读:nginx rewrite重写规则与防盗链配置方法,rewrite规则格式中flag标 ...
- Nginx的模块与工作原理
Nginx由内核和模块组成,其中,内核的设计非常微小和简洁,完成的工作也非常简单,仅仅通过查找配置文件将客户端请求映射到一个location block(location是Nginx配置中的一个指令, ...
- nginx rewrite if指令剖析
0. 前言 nginx的if功能确实是弱得可以,严重影响了生产效率.故此,先提出严正抗议! 1. if指令配置的实现 对于这个功能奇弱的if指令,nginx实现得还特别复杂.下面将对其实现进行剖析. ...
最新文章
- 大型网站架构系列:分布式消息队列
- eclipsse 关闭 方法提示_MacOS10.15.7关闭AppStore右上角小红标提示及系统更新右上角小红标提示的方法...
- python带格式复制excel样式和内容_使用python的xlrd,xlwt和xlutils.copy保留样式
- 【MFC】Windows窗口样式
- sklearn自学指南(part43)--数据加载工具
- C# GTS四轴运动控制器实例(固高科技步进电机不带编码器) -V1
- C++ 语法都不会怎么写代码? 03
- linux无法安装php-fpm,Linux下的php-fpm相关问题解决
- 蓝桥杯2013c++真题:颠倒的价牌
- nvm 下载node 下载不下来_挑战不可能最新版手游下载_挑战不可能最新版安卓版下载...
- 实战PyQt5: 137-QChart图表之散点图
- 前端vue实现PDF预览
- 对10G/40Gphy中auto-negotiation功能调试
- 国产银河数学式电子计算机是属于,《世界上公认的第一台电子计算机.doc
- Android Studio连接海马玩模拟器
- 人工智能研究中心快递柜——代码分析十一
- 高速电路设计实践学习笔记(一)电阻 电容 电感 磁珠
- 高企认定人员及研发费要求?
- 输入法遮挡EditText输入框的问题
- 湖南广电台长吕焕斌:湖南电视台的新媒体发展战略