nginx rewrite

nginx rewrite

 
rewrite的作用

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

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

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

语法

rewrite regex replacement [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终止重写后的匹配

 

转载于:https://www.cnblogs.com/jun1019/p/6260679.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值