Nginx rewrite 中break与last指令的区别

PS:原创文章,如需转载,请注明出处,谢谢!

本文地址:http://flyer0126.iteye.com/blog/2257670

nginx rewrite指令
语法:rewrite regex replacement [flag];
默认值:无
作用域:server,location,if
如果一个URI匹配指定的正则表达式regex,URI就按照replacement重写。
rewrite按配置文件中出现的顺序执行。flags标志可以停止/继续处理。
如果replacement以”http://”或”https://”开始,将不再继续处理,这个重定向将返回给客户端。
flag可以是如下参数:
  last 停止处理后续rewrite指令集,然后对当前重写的新URI在rewrite指令集上重新查找。
  break 停止处理后续rewrite指令集,并不在重新查找。
  redirect 如果replacement不是以http:// 或https://开始,返回302临时重定向
  permant 返回永久重定向的HTTP状态301 ※原有的url支持正则 重写的url不支持正则
最终完整的重定向URL包括请求scheme(http://,https://等),请求的server_name_in_redirect和 port_in_redirec三部分,说白了也就是http协议 域名 端口三部分组成。

示例如下:

Conf代码  

  1. location /break/ {
  2. rewrite ^/break/(.*) /test/$1 break;
  3. return 402;
  4. }
  5. location /last/ {
  6. rewrite ^/last/(.*) /test/$1 last;
  7. return 403;
  8. }
  9. location /test/ {
  10. return 508;
  11. }

请求: http://domain/break/*
返回:404

请求: http://domain/last/*

返回:508

原因:根据上述内容,break与last都停止处理后续rewrite指令集,不同之处在与last会重新发起新的请求,而break不会。当请求break时,如匹配内容存在的话,可以直接请求成功,返回200;而如果请求内容不存在,则返回404。当请求为last的时候,会对重写的新uri重新发起请求,如上例则返回508。

总结:last与break都停止处理后续rewrite指令集,最大的不同是,last会重新发起一个新请求,并重新匹配location。

时间: 01-24

Nginx rewrite 中break与last指令的区别的相关文章

nginx中http.server.location指令语法

location是nginx配置文件中http块下server块下的一个指令,语法结构为: location  [ = | ~ | ~* | ^~ ]  uri  { ... } []内部的部分为可选项,四种标识只能选其一,用于指定请求字符串和uri的匹配方式. 如果不加可选部分,nginx先按顺序将请求路径匹配所有带标准uri的location,再匹配带正则uri的location,如果有正则uri匹配成功则使用该location,如果没有正则uri匹配成功,则使用标准uri中匹配度最高的一个

nginx rewrite标签配置以及用户认证配置

一.nginx  rewrite标签 rewrite 实现URL的改写主要是实现伪静态 1.  rewrite指令语法 指令语法:rewrite regex replacement[flag] 默认值:none 应用位置:server,location,if rewrite是实现URL重写的关键指令,根据regex(正则表达式)部分内容,重定向到replacement部分内容,结尾是flag标记,下面是一个简单的URL Rewrite跳转 Rewrite ^/(.*)http://www.eti

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来实现. (

Nginx服务器中处理AJAX跨域请求的配置方法讲解

Nginx 实现AJAX跨域请求AJAX从一个域请求另一个域会有跨域的问题.那么如何在nginx上实现ajax跨域请求呢?要在nginx上启用跨域请求,需要添加add_header Access-Control*指令.如下所示: ? 1 2 3 4 5 6 7 8 9 10 11 12 location /{ add_header 'Access-Control-Allow-Origin' 'http://other.subdomain.com'; add_header 'Access-Cont

nginx rewrite uri地址重写

介绍 大家经常会遇到这样需求,一个活动页面的URL地址很长,推广起来产品运营和用户反馈不容易记住 不美观,但是暂时没办法修改代码,这个时候就可以用到rewrite.或者你现在网站升级到https现在有些用户还在访问http你想统一用https,这些都可以用rewrite规则来实现. rewrite会重写用户的请求地址,但是不会修改问号后面参数,返回给用户的httpcode为302. 语法:rewrite regex replacement [flag]; 作用域:server, location

Nginx Rewrite正则表达式案例

前两天简单整理了下Nginx的URL Rewrite基本指令,今天谈谈Nginx Rewrite的location正则表达式. 1.Nginx Rewrite 基本标记(flags) last 相当于Apache里的[L]标记,表示完成rewrite break 本条规则匹配完成之后,终止匹配,不再匹配后面的规则. redirect 返回302临时重定向 地址栏会显示跳转后的地址 permanent 返回301永久重定向 地址栏会显示跳转后的地址 2.正则表达式: 1)变量名,错误的值包括:空字

Nginx Rewrite规则初探(转)

Nginx  rewrite(nginx url地址重写)Rewrite 主要的功能就是实现URL的重写,Nginx的Rewrite规则采用Pcre,perl兼容正则表达式的语法规则匹配,如果需要Nginx的Rewrite功能,在编译Nginx之前,需要编译安装PCRE库. 通过Rewrite规则,可以实现规范的URL.根据变量来做URL转向及选择配置. if        指令规则语法: [plain] view plain copy if ($http_user_agent ~MSIE){

nginx rewrite php的CI(CodeIgniter)框架

一. 了解nginx rewrite: 正则表达式匹配,其中: * ~ 为区分大小写匹配    * ~* 为不区分大小写匹配    * !~和!~*分别为区分大小写不匹配及不区分大小写不匹配 文件及目录匹配,其中: * -f和!-f用来判断是否存在文件    * -d和!-d用来判断是否存在目录    * -e和!-e用来判断是否存在文件或目录    * -x和!-x用来判断文件是否可执行 flag标记有: * last 相当于Apache里的[L]标记,表示完成rewrite    * bre

Nginx Rewrite学习笔记

相关指令有if.rewrite.set.return.break等,其中rewrite是最关键的指令. 1.if指令 语法: if(confition){...} 默认值:none 使用环境:server,location 该指令用于检查一个条件是否符合,如果条件符合,则执行大括号内的语句.if指令不支持嵌套,不支持多个条件&&和||处理. 以下信息可以被指定为条件 (1)变量名,错误的值包括:空字符串"",或者任何以0开始的字符串 (2)变量比较可以使用"=