nginx rewrite

rewrite的作用

rewrite可以实现url的重定向,把用户请求的url转发到另一个url,但用户浏览器地址并不改变

例如常用的伪静态化,就是通过rewrite实现的

/user/123 => /user.php?id=123

语法

rewrite regexreplacement [flag];

regex - 定义url匹配规则

replacement - 要重写的目标url

[flag] - 标志位,是可选项,定义重写后的相关操作

规则说明

(1)rewrite只能放在server{},location{},if{}中

(2)只能对域名后边的除参数外的字符串起作用

例如 http://z.com/a/we/index.php?id=1,只对/a/we/index.php重写,也就是 regex 匹配的是 /a/we/index.php 这个字符串

示例

(1)如果是IE浏览器发出的请求,就把请求转到ie目录下

if ($http_user_agent ~ MSIE) {

rewrite^(.*)$/ie/$1 break;

}

(2)对形如/images/bla_500x400.jpg的文件请求,重写到/resizer/bla.jpg?width=500&height=400地址

rewrite^/images/(.*)_(\d+)x(\d+)\.(png|jpg|gif)$/resizer/$1.$4?width=$2&height=$3? last;

这里适用了标志位-last,意思是这是最后一条rewrite规则

(3)域名跳转

server
{
  listen      80;
  server_name  jump.test.com;
  index index.html index.htm index.php;
  root  /opt/www;
rewrite^/http://www.test.com/;
}

(4)把符合规则的目录转换到其他目录

rewrite^/([0-9a-z]+)job/(.*)$/area/$1/$2;

(5)将文件名转成多级目录下的文件

例如 /job-123-456-789.html 指向/job/123/456/789.html

rewrite^/job-([0-9]+)-([0-9]+)-([0-9]+)\.html$/job/$1/$2/jobshow_$3.html last;

flag标志位

last : 相当于Apache的[L]标记,表示完成rewrite

break : 停止执行当前虚拟主机的后续rewrite指令集

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

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

last和break的区别

last不终止重写后的url匹配,即新的url会再从server走一遍匹配流程,而break终止重写后的匹配

原文发布于微信公众号 - 性能与架构(yogoup)

原文发表时间:2015-09-02

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Python小屋

Python导入标准库和扩展库对象的几种方式

Python中的对象大概可以分为三类:内置对象、标准库对象和扩展库对象。其中内置对象是直接编译进解释器的可以直接使用,没有对应的Python源代码;标准库对象是...

5328
来自专栏程序员互动联盟

【专业技术】C语言EOF如何使用?

存在问题: 又一次遇到有人问EOF的用法,到底如何来使用那? 解决方案: 这里有一篇文章写的不错,希望对EOF没有理解的同学能有所帮助。 我学习C语言的时候,遇...

3888
来自专栏前端知识分享

Vue---从后台获取数据vue-resource的使用方法

  作为前端人员,在开发过程中,我们大多数情况都需要从后台请求数据,那么在vue中怎样从后台获取数据呢?接下来,我简单介绍一下vue-resource的使用方法...

2791
来自专栏lgp20151222

idea报错:Error running $classname: Command line is too long. Shorten command line for $classname.

打印的变量太长了,超过了限制,这都会报错...我只想知道idea基于什么原理会报这个错...

9783
来自专栏小狼的世界

Sublimetext3将空格转换为Tab

最近在学习Python,从网上粘贴的代码很多缩进都是空格,这样就会导致代码执行的时候报错,因为Python是依靠缩进来判断代码层次的。我的编辑器是Sublime...

971
来自专栏Python小屋

Python多线程编程中daemon属性的作用

在脚本运行过程中有一个主线程,若在主线程中创建了子线程,当主线程结束时根据子线程daemon属性值的不同可能会发生下面的两种情况之一: 如果某个子线程的daem...

3405
来自专栏Java工程师日常干货

【随笔】JVM核心:JVM运行和类加载

本篇博客将写一点关于JVM的东西,涉及JVM运行时数据区、类加载的过程、类加载器、ClassLoader、双亲委派机制、自定义类加载器等,这些都是博主自己的一点...

753
来自专栏dizhiling专栏

一行命令实现cpu占用率100%

cat /proc/cpuinfo |grep "physical id" | wc -l 可以获得CPU的个数, 我们将其表示为N.

1231
来自专栏云霄雨霁

了解Jalangi2

1250
来自专栏mwangblog

Linux中的管道命令(一)

1764

扫码关注云+社区

领取腾讯云代金券