nginx rewrite 转发配置_nginx rewrite 规则的配置

nginx write 指令执行顺序执行 server 块的 rewrite 指令

进行 location 匹配

执行 location 块的 rewrite 指令

上述过程可能会嵌套、重复执行,如果 rewrite 次数达到 10 次,就会返回 500 Internal Server Error

break 指令

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

如:

if ($slow) {

limit_rate 10k;

break;

}

if 指令

对给定条件 condition 进行判断,如果为真,则执行大括号内的 rewrite 指令

if (condition)

{

...

}

如:

if ($http_user_agent ~ MSIE) {

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

}

if ($http_cookie ~* "id=([^;]+)(?:;|$)") {

set $id $1;

}

if ($request_method = POST) {

return 405;

}

if ($slow) {

limit_rate 10k;

}

if ($invalid_referer) {

return 403;

}

if 指令的 condition

if 指令的 condition 可以是下列中的任何内容:if 指令的 condition条件判断内容

变量如果变量值为空字符串或以 0 开始的字符串则为 false

=、!=比较一个变量和字符串是否相等

~、~*使用正则表达式匹配变量

-f、!-f检查一个文件是否存在

-d、!-d检查一个目录是否存在

-e、!-e检查一个文件、目录、符号链接是否存在

-x、!-x检查一个文件是否可执行

return 指令

用来停止处理并返回状态或 URL

return code;

return URL;

rewrite 指令

rewrite regex replacement [flag];

如果一个URI匹配指定的正则表达式regex,URI就按照replacement重写

flag 取值如下:last -- 停止处理后续rewrite指令集,然后对当前重写的新URI重新进入 server 进行匹配

break -- 停止处理后续rewrite指令集,并不在重新查找,但是当前location内剩余非rewrite语句和location外的的非rewrite语句可以执行

redirect -- 如果replacement不是以http:// 或https://开始,返回302临时重定向

permant -- 返回301永久重定向

如:

server {

...

rewrite ^(/download/.*)/media/(.*)..*$ $1/mp3/$2.mp3 last;

rewrite ^(/download/.*)/audio/(.*)..*$ $1/mp3/$2.ra last;

return 403;

...

}

如果在 rewrite 的 URL 最后加一个 ?,则说明在 rewrite 后去掉原请求的所有参数

rewrite ^/users/(.*)$ /show?user=$1? last;

set 指令

创建自定义变量

set variable value;

rewrite_log 指令

开启或关闭以notice级别打印rewrite处理日志到error log文件,可以出现在 main、server、location 配置的任何位置

rewrite_log on|off;

uninitialized_variable_warn 指令

控制是否输出为初始化的变量到日志

uninitialized_variable_warn on|off;

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值