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

nginx——rewrite模块的更多相关文章

  1. [转帖]Nginx rewrite模块深入浅出详解

    Nginx rewrite模块深入浅出详解 https://www.cnblogs.com/beyang/p/7832460.html rewrite模块(ngx_http_rewrite_modul ...

  2. Nginx rewrite模块深入浅出详解

    rewrite模块(ngx_http_rewrite_module) nginx通过ngx_http_rewrite_module模块支持url重写.支持if条件判断,但不支持else.另外该模块需要 ...

  3. nginx rewrite模块

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

  4. 5.6 Nginx Rewrite模块配置

  5. nginx rewrite 实现URL跳转

    最近工作中常常要改nginx配置,学习了nginx中rewrite的用法 URL跳转这里说的URL跳转就是用户在访问一个URL时将其跳转到另一个URL上.常见的应用场景是让多个域名跳转到同一个URL上 ...

  6. Nginx Rewrite相关功能

    目录 Nginx Rewrite相关功能 ngx_http_rewrite_module模块指令: if指令: set指令: break指令: return指令: rewrite_log指令: rew ...

  7. 一篇文章说透Nginx的rewrite模块

    rewrite模块即ngx_http_rewrite_module模块,主要功能是改写请求URI,是Nginx默认安装的模块.rewrite模块会根据PCRE正则匹配重写URI,然后发起内部跳转再匹配 ...

  8. Nginx Rewrite相关功能-ngx_http_rewrite_module模块指令

    Nginx Rewrite相关功能-ngx_http_rewrite_module模块指令 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任.

  9. Nginx学习总结:proxy与rewrite模块(三)

    斜体下划线,表示建议采用默认配置,无需显式的配置 一.ngx_http_upstream_module 此模块中可配置的指令并不是很多.nginx的负载均衡算法包括: 1)round-robin:轮询 ...

随机推荐

  1. MFC去掉win7玻璃效果

    在MainFrame的OnCreate中添加以下代码 if (CWnd::OnCreate(lpCreateStruct) == -1) return -1; HINSTANCE hInstance ...

  2. Transaction: atomicity, consistency, separability, persistence

    Transaction: atomicity, consistency, separability, persistence http://langgufu.iteye.com/blog/143440 ...

  3. .net对js和css、img剥离项目进行压缩优化、cdn加速

    由于网站首页以及经常用的页面初始化慢,想后面想了对image.js和css进行迁移优化. 1.把他放到独立的域名上面,这个就要对image,js和css从原项目上面脱离,以及把原来很多页面引用的地址修 ...

  4. UVa11925 Generating Premutations

    留坑(p.254) #include<cstdio> #include<cstring> #include<cstdlib> #include<algorit ...

  5. ajaxPro用法

    一.AjaxPro的使用 1.在项目中添加引用,浏览找到AjaxPro.2.dll文件 2.在Web.config中的system.web里面写入以下代码 </configuration> ...

  6. 【android】ImageView的src和background的区别以及两者的妙用

    一.ImageView中XML属性src和background的区别: background会根据ImageView组件给定的长宽进行拉伸,而src就存放的是原图的大小,不会进行拉伸 .src是图片内 ...

  7. 怎样安装两个tomcat,怎样配置

    装两个tomcat 各自是6.0和7.0 可想执行tomcat6.0 可是实际上却执行tomcat7.0 两个版本号都是用解压缩包 事实上就是不能执行tomcat6.0 仅仅能执行7.0 两个环境变量 ...

  8. 树莓派做AP发射wifi(RTL8188CUS芯片) 分类: shell ubuntu Raspberry Pi 2014-11-29 01:25 822人阅读 评论(0) 收藏

    最近在做一个项目,需要用树莓派作为AP发射wifi,对比cubieboard,树莓派的配置容易得多,而且支持也更多. 较为官方的介绍配置为无线热点的文章莫过于这一篇<RPI-Wireless-H ...

  9. windows 配置host

    windows 下如何配置host文件, 只需修改: C:\Windows\System32\drivers\etc\hosts文件即可 默认文件内容如下: # Copyright (c) 1993- ...

  10. 解决error:could not open ...jvm.cfg

    出现error:could not open '...jvm.cfg'大多是以前安装jdk或者jre的时候在注册表里注册过,现在安装的文件夹不在或者换了名字,有很多解决方法,最简单的一招是删除java ...